概要
既存の.mdファイルを読み込み、note.comの下書き記事を作成する新しいMCPツール note_create_from_file を実装する。
モチベーション
現在、note_create_draftツールはタイトルと本文を直接引数として受け取る必要がある。ローカルで執筆した.mdファイルから直接記事を作成できれば、ワークフローが大幅に改善される。
機能要件
基本機能
YAMLフロントマター形式
```markdown
title: 記事タイトル
tags:
本文...
```
画像処理
既存機能との統合
技術設計
新規ファイル
| ファイル |
目的 |
src/note_mcp/utils/file_parser.py |
Markdownファイル解析 |
tests/unit/test_file_parser.py |
ユニットテスト |
tests/e2e/test_create_from_file.py |
E2Eテスト |
変更ファイル
| ファイル |
変更内容 |
src/note_mcp/server.py |
MCPツール追加 |
pyproject.toml |
pyyaml依存関係追加 |
データモデル
```python
@DataClass
class LocalImage:
markdown_path: str # Markdown内のパス
absolute_path: Path # 絶対パス
alt_text: str = ""
@DataClass
class ParsedArticle:
title: str
body: str
tags: list[str] = field(default_factory=list)
local_images: list[LocalImage] = field(default_factory=list)
source_path: Path | None = None
```
MCPツールインターフェース
```python
@mcp.tool()
async def note_create_from_file(
file_path: Annotated[str, "Markdownファイルのパス"],
upload_images: Annotated[bool, "ローカル画像をアップロードするかどうか"] = True,
) -> str:
```
エッジケース
- H1もH2もない → エラーメッセージ
- 画像ファイル不存在 → 警告ログ、処理続行
- 10MB超の画像 → 既存バリデーションでエラー
テスト計画
ユニットテスト
- フロントマター付きファイル解析
- H1からタイトル抽出(削除確認)
- ローカル画像検出
- エラーケース
E2Eテスト
- フロントマター付き記事作成
- H1のみの記事作成
- TOC付き記事作成
- 画像アップロード
依存関係
関連
- 既存ツール:
note_create_draft, note_upload_body_image
概要
既存の
.mdファイルを読み込み、note.comの下書き記事を作成する新しいMCPツールnote_create_from_fileを実装する。モチベーション
現在、
note_create_draftツールはタイトルと本文を直接引数として受け取る必要がある。ローカルで執筆した.mdファイルから直接記事を作成できれば、ワークフローが大幅に改善される。機能要件
基本機能
YAMLフロントマター形式
```markdown
title: 記事タイトル
tags:
本文...
```
画像処理
./images/test.pngなど)を検出既存機能との統合
[TOC])対応(既存のブラウザ自動化を使用)技術設計
新規ファイル
src/note_mcp/utils/file_parser.pytests/unit/test_file_parser.pytests/e2e/test_create_from_file.py変更ファイル
src/note_mcp/server.pypyproject.tomlデータモデル
```python
@DataClass
class LocalImage:
markdown_path: str # Markdown内のパス
absolute_path: Path # 絶対パス
alt_text: str = ""
@DataClass
class ParsedArticle:
title: str
body: str
tags: list[str] = field(default_factory=list)
local_images: list[LocalImage] = field(default_factory=list)
source_path: Path | None = None
```
MCPツールインターフェース
```python
@mcp.tool()
async def note_create_from_file(
file_path: Annotated[str, "Markdownファイルのパス"],
upload_images: Annotated[bool, "ローカル画像をアップロードするかどうか"] = True,
) -> str:
```
エッジケース
テスト計画
ユニットテスト
E2Eテスト
依存関係
pyyaml>=6.0.0関連
note_create_draft,note_upload_body_image