MCP server for Movable Type - AI-powered draft creation and editing
The server defines 6 tools with reasonable naming conventions and complete input schemas. Tool names follow verb_noun patterns (create_draft, update_last_draft, get_draft, list_recent_drafts, list_sites). Descriptions are present but generic, they state WHAT each tool does but lack guidance on WHEN to use each tool or dependencies between them. All tools have input schemas with typed parameters and descriptions. However, output schemas are NOT documented in the tool definitions, responses are inferred from code implementation. The `update_last_draft` tool depends on implicit session state, which creates a potential composition issue. Error handling exists but is basic (missing not found case returns structured JSON). No parameter constraints use enums where they could (e.g., 'status' in create_entry). Tool descriptions average ~100 chars, which is adequate but below the A+ baseline of 50-200 chars for LLM optimization. No security annotations or scope declarations visible.
Movable Typeに新しい下書き記事を作成します。作成した記事は自動的にセッションに記憶され、update_last_draftで編集可能になります。
指定したIDの下書き記事の詳細を取得します。
最近の下書き記事の一覧を取得します。記事IDやタイトルを確認できます。
利用可能なブログ(サイト)の一覧を取得します。blog_idを確認する際に使用します。
指定したIDの下書き記事を更新します。明示的に記事IDを指定して編集したい場合に使用します。
最後に作成または編集した下書き記事を更新します。タイトル、本文、タグなどを部分的に更新できます。
No output schemas documented for any tool. Tool responses are inferred from code; LLMs cannot know what fields to expect without explicit schema.
update_last_draft depends on implicit session state (setLastEntry/getLastEntry in SessionManager). This creates a hidden dependency and potential error cases (e.g., calling update_last_draft without first calling create_draft). The session state is in-memory only and not documented in tool descriptions.
Error handling is incomplete. The code returns structured JSON for expected errors (e.g., 'last entry not found'), but there is no distinction between error types (retryable vs permanent, user-fixable vs fatal). No guidance on recovery actions.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | D | 59 | 2026-07-28+ | v2 |
| 2026-03-09 | F | 43 | - | v1 |
Parameter descriptions do not include format constraints or ranges. E.g., blog_id and entry_id are described as 'ブログID' and '記事ID' but lack any guidance on valid ranges, format, or examples. The limit parameter in list_recent_drafts has a default (10) but no documented min/max.
Tool descriptions are generic and in Japanese. LLM prompt engineering requires English descriptions that explain WHEN and WHY to call a tool, not just what it does. Non-English descriptions reduce discoverability and reasoning clarity.