esa MCP Server
OfficialClick on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@esa MCP ServerShow me the recent posts in my team"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
esa MCP Server
日本語 | English
esa.io の公式 MCP(Model Context Protocol)サーバー(STDIO Transport 版)
概要
AI アシスタントと情報共有サービス esa をつなぐ MCP サーバーです。Model Context Protocol 経由で、AI アシスタントから esa の記事を読んだり、作成・更新・管理などができます。
Related MCP server: Kibela MCP Server
使えるツール
チーム管理
esa_get_teams- 所属している esa チームの一覧esa_get_team_stats- チームの統計情報(メンバー数、記事数、コメント数など)esa_get_team_tags- チーム内で使われているタグと使用回数esa_get_team_members- チームメンバーとその役割・プロフィール
記事管理
esa_search_posts- 記事を検索esa_get_post- 記事 ID から記事を取得(バックリンク総数backlinks_count、本文の文字数・行数body_md_statsを含む)esa_get_post_backlinks- 指定記事を参照している記事の一覧(ページング対応)esa_create_post- 新しい記事を作成(タグ、カテゴリー、WIP ステータス付き)esa_update_post- 記事を更新(タイトル、本文、タグ、カテゴリー、WIP ステータス)esa_append_post- 記事本文の末尾に追記(既存本文を取得せずに追記でき、新しいリビジョンとして保存)esa_prepend_post- 記事本文の先頭に追記(既存本文を取得せずに追記でき、新しいリビジョンとして保存)
記事の操作
esa_archive_post- 記事をアーカイブ(Archived/ カテゴリーへ移動)esa_ship_post- 記事を Ship It!(WIP を外して公開)esa_duplicate_post- 記事を複製(同じタイトル・本文の WIP 記事を作成。別チームへの複製も可能)
コメント管理
esa_get_comment- コメント ID からコメントを取得esa_create_comment- 記事にコメントを追加esa_update_comment- コメントを編集esa_delete_comment- コメントを削除esa_get_post_comments- 記事のコメント一覧(ページング対応)esa_get_team_comments- チーム全体のコメント一覧(ページング対応)
カテゴリー管理
esa_get_categories- 指定パス配下のカテゴリー一覧esa_get_top_categories- トップレベルのカテゴリー一覧esa_get_all_category_paths- チーム内の全カテゴリーパス一覧(記事数付き、フィルタリング対応)カテゴリ構造の把握、整理、統合の計画に最適
フィルター例:
prefix: "dev"で開発関連、match: "api"で API 関連を検索
添付ファイル
esa_get_attachment- 記事やコメントの添付ファイルを取得サポート形式(JPEG, PNG, GIF, WebP)で 30MB 以下の画像は base64 エンコードで返却
その他のファイル、大きな画像、または forceSignedUrl 指定時は署名付き URL(有効期限 5 分)を返却
ヘルプとドキュメント
esa_get_search_options_help- esa の検索構文ヘルプesa_get_markdown_syntax_help- esa の Markdown 記法ヘルプesa_search_help- esa のドキュメントから機能や用語を検索
リソース
esa_recent_posts- 最近更新された記事の一覧テンプレート:
esa://teams/{teamName}/posts/recent戻り値: 最近更新された記事の JSON リスト
プロンプト
esa_summarize_post- esa の記事を要約入力: チーム名と記事 ID
出力: 記事の構造化された要約
MCP クライアントの設定
MCP クライアントの設定ファイルに以下を追加します:
用意する環境変数
ESA_ACCESS_TOKEN: アクセストークン
必要なスコープ:
read writeまたはadmin:comment read:post write:post read:category read:tag read:attachment read:team read:memberPAT v2を推奨します。
LANG: UI の言語設定
Claude Desktop の例
claude_desktop_config.json への追加方法:
オプション 1: docker(推奨)
{
"mcpServers": {
"esa": {
"command": "docker",
"args": [
"run",
"-i",
"--rm",
"-e",
"ESA_ACCESS_TOKEN",
"-e",
"LANG",
"ghcr.io/esaio/esa-mcp-server"
],
"env": {
"ESA_ACCESS_TOKEN": "your_personal_access_token",
"LANG": "ja"
}
}
}
}オプション 2: npx
{
"mcpServers": {
"esa": {
"command": "/Users/your-username/.nodenv/shims/npx",
"args": ["@esaio/esa-mcp-server"],
"env": {
"ESA_ACCESS_TOKEN": "your_personal_access_token",
"LANG": "ja"
}
}
}
}注意:
/path/to/your/nodeはwhich nodeで調べたパスに置き換えてください。
レジストリ
このパッケージはルート直下に registry.json を同梱しており、登録されているツール / リソース / プロンプトの一覧を公開しています。サーバーを起動せずにプログラムから読み取れます:
import registry from "@esaio/esa-mcp-server/registry.json" with { type: "json" };スキーマ:
{
"tools": [{ "name": "esa_get_teams" }, "..."],
"resources": [
{ "name": "esa_recent_posts", "uriTemplate": "esa://teams/{teamName}/posts/recent" }
],
"prompts": [{ "name": "esa_summarize_post" }]
}registry.json は npm run build:registry で生成され、登録内容と差分が出ると CI で fail します。
リンク
esa.io - 情報共有サービス esa
Model Context Protocol - MCP の詳細
API ドキュメント - esa API リファレンス
Claude Desktop - MCP 対応の AI アシスタント
サポート
📧 Support: Feedback Form
🐛 Issues: GitHub Issues
📖 Help: esa Docs
Made with ❤️ by the esa team
Available Tools
28 toolsesa_append_postAppend content to an existing esa postADestructive
Appends Markdown content to the end of an existing post's body, saving it as a new revision. Unlike esa_update_post, this does not require fetching the current body first, making it ideal for adding to a post (e.g. log entries, meeting notes). Optionally set wip to change the WIP state.
| Name | Required | Description | Default |
|---|---|---|---|
| wip | No | WIP state after the insert. Defaults to the post's current WIP state | |
| content | Yes | The Markdown content to insert. Use 4 spaces for indentation. Line endings are normalized to LF. Include a blank line at the boundary to insert it as a separate block. | |
| message | No | Change message. Defaults to "Updated via API." when omitted | |
| teamName | No | Team name (required). Use esa_get_teams first to see available teams. | |
| postNumber | Yes | The post number to add content to |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations indicate destructiveHint=true, and the description confirms it saves a new revision (destructive write). It adds detail about appending to the end and saving as revision, which is beyond the annotation. No contradiction.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences plus an optional clause. The core action is front-loaded, and every sentence adds value. No fluff or redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With 5 parameters, no output schema, and destructive annotation, the description covers purpose, usage, parameter details, and behavioral context. It is sufficiently complete for the agent to select and invoke the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, and the description adds significant value: for 'content' it specifies indentation, line endings, and block separation; for 'teamName' it directs to esa_get_teams; for 'wip' defaults are clarified. This goes well beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool appends Markdown content to the end of a post's body and creates a new revision. It differentiates from esa_update_post by noting it doesn't require fetching the current body, making the purpose distinct.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly contrasts with esa_update_post and provides use cases like log entries and meeting notes. It also mentions optionally setting wip, giving clear guidance on when and how to use.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
esa_archive_postArchive a postADestructive
Archives a post by moving it to the Archived/ category. If the post is in 'dev/docs', it becomes 'Archived/dev/docs'. Posts without category go to 'Archived'.
| Name | Required | Description | Default |
|---|---|---|---|
| message | No | Archive message for the post | |
| teamName | No | Team name (required). Use esa_get_teams first to see available teams. | |
| postNumber | Yes | The post number to archive |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds behavioral context beyond the destructiveHint annotation by specifying how the post is moved to the Archived/ category, including handling of category subpaths (e.g., 'dev/docs' becomes 'Archived/dev/docs'). This is useful for understanding the exact effect of the tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with no extraneous information. Every word adds value: the first defines the primary action, the second clarifies edge cases for category paths.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple archive operation with a destructiveHint, the description explains the core behavior and category handling. It does not cover reversibility, impact on comments, or team requirements, but given the tool's simplicity and the presence of the destructiveHint, it is adequately complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 100% description coverage, so the schema already documents all three parameters. The description does not add new semantic meaning beyond what the schema provides, but it implicitly reinforces the postNumber and teamName roles. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The title and description clearly state the tool archives a post by moving it to the Archived/ category. It specifies the verb (archives) and resource (post), and distinguishes from sibling tools like delete or update by describing the archiving behavior with category path details.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives like esa_delete_post or esa_update_post. It does not mention prerequisites, team name requirements (though schema hints at esa_get_teams), or scenarios where archiving is preferred.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
esa_create_commentCreate a new comment on a postCDestructive
Creates a new comment on an existing post in an esa team.
| Name | Required | Description | Default |
|---|---|---|---|
| user | No | Comment author's screen_name (owner permission required) | |
| bodyMd | Yes | The comment content in Markdown format. Use 4 spaces for indentation. | |
| teamName | No | Team name (required). Use esa_get_teams first to see available teams. | |
| postNumber | Yes | The post number to comment on |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotation 'destructiveHint: true' already indicates a state-changing operation. The description merely confirms creation, adding no extra behavioral details (e.g., error handling, side effects, or authentication requirements).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence, concise but lacking structure. It could benefit from a clearer separation of purpose and usage notes.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with 4 parameters, no output schema, and only a terse description, the definition lacks completeness. It does not explain return values, error cases, or required permissions beyond the schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the schema already documents all parameters. The description adds no additional meaning beyond what is in the parameter descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action (creates) and the resource (a new comment on an existing post). It distinguishes from sibling tools like esa_update_comment and esa_delete_comment, though it could explicitly differentiate from esa_create_post.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit guidance on when to use this tool vs alternatives. The schema hints at prerequisites (e.g., teamName from esa_get_teams), but the description itself provides no context for selecting this tool over others.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
esa_create_postCreate a new esa postBDestructive
Creates a new post in an esa team with optional tags, category, and WIP status.
| Name | Required | Description | Default |
|---|---|---|---|
| wip | No | Whether the post is Work In Progress. Set to false to ship it (mark as complete and ready to be published) | |
| name | Yes | The post name (title) | |
| tags | No | Tags for the post | |
| bodyMd | No | The post content in Markdown format. Use 4 spaces for indentation. | |
| message | No | Update message for the post | |
| category | No | Category path (e.g., 'dev/docs') | |
| teamName | No | Team name (required). Use esa_get_teams first to see available teams. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare destructiveHint: true, which is consistent. The description adds minimal extra context (WIP status) but does not cover side effects, permissions, or team scope. With annotations handling the safety profile, a 3 is appropriate.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single, front-loaded sentence with no wasted words. Every word is informative and the structure is optimal for quick scanning.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with 7 parameters and no output schema, the description lacks prerequisites (e.g., teamName requirement), post-creation state defaults, and error conditions. It is too sparse for an AI agent to fully understand the invocation context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so baseline is 3. The description lists parameters generically but adds no meaning beyond the schema's own parameter descriptions. It does not explain interactions or default behavior.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('creates') and resource ('post'), and lists key optional attributes (tags, category, WIP status). It clearly distinguishes from sibling tools like esa_update_post or esa_append_post.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool versus alternatives. Siblings like esa_update_post or esa_ship_post exist for different lifecycle stages, but no exclusion criteria or preferred contexts are provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
esa_delete_commentDelete a commentADestructive
Deletes a comment from an esa team by comment ID.
| Name | Required | Description | Default |
|---|---|---|---|
| teamName | No | Team name (required). Use esa_get_teams first to see available teams. | |
| commentId | Yes | The comment ID to delete |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already indicate destructiveHint=true, so the description does not need to restate that. However, the description lacks additional context such as whether the deletion is irreversible, what happens to associated data, or required permissions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, concise sentence that front-loads the verb and resource. Every word is necessary and well-placed.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple delete tool with two parameters and no output schema, the description is mostly complete. A minor gap: it does not mention that the deletion is permanent or indicate success/error responses.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so baseline is 3. The description does not add any new meaning beyond the schema's descriptions for teamName and commentId.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action (deletes), the resource (comment), and the required identifier (comment ID). It distinguishes itself from siblings like esa_update_comment and esa_get_comment.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description does not explicitly state when to use this tool versus alternatives. The input schema hints at a prerequisite (using esa_get_teams for teamName), but no direct guidance on when not to use it or when to prefer other tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
esa_duplicate_postDuplicate a postADestructive
Duplicates a post by creating a new WIP post with the same name and body_md as the source post. By default the duplicate is created in the source team; specify targetTeamName to duplicate into a different team.
| Name | Required | Description | Default |
|---|---|---|---|
| teamName | No | Team name (required). Use esa_get_teams first to see available teams. | |
| postNumber | Yes | The source post number to duplicate | |
| targetTeamName | No | The destination team name for the duplicated post. Defaults to the source team when omitted. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description explains the behavior of creating a new WIP post with the same content. Since annotations only provide destructiveHint: true (which might be misleading for a creation action), the description adds clarity about the non-destructive nature to the source. It does not cover permissions or error cases, but it is adequate.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two concise sentences, front-loading the core action and then explaining the optional parameter. No redundant information, every sentence serves a purpose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with 3 parameters (one required) and no output schema, the description covers the main behavior and optional targeting. It lacks mention of return format or error conditions, but is complete for typical usage.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
All three parameters have descriptions in the schema (100% coverage). The description adds minimal extra context beyond the schema, reinforcing the targetTeamName usage. Given high schema coverage, the description is sufficient but does not significantly enhance understanding.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it duplicates a post, creating a new WIP post with the same name and body_md. It specifies the default behavior (same team) and the optional targetTeamName parameter, distinguishing it from similar tools like esa_create_post.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explains when to use the tool (to duplicate a post) and how to use the targetTeamName to duplicate to a different team. However, it does not explicitly exclude alternatives or state when not to use it, e.g., versus creating a new post manually.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
esa_get_all_category_pathsGet category paths with paginationARead-only
Retrieves category paths in a team to understand the overall category structure. Perfect for category organization, cleanup, migration planning, or finding similar categories. Returns a paginated list of paths with post counts, sorted in lexicographic order. Supports filtering (prefix/suffix/match/exact_match) to find categories by pattern.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Page number (starts from 1) | |
| match | No | Filter paths containing specified substring anywhere (e.g., 'doc' finds 'docs', 'dev/docs', 'documentation') | |
| prefix | No | Filter paths starting with specified string (e.g., 'dev' finds 'dev', 'dev/api', 'dev/docs') | |
| suffix | No | Filter paths ending with specified string (e.g., 'api' finds 'dev/api', 'backend/api') | |
| perPage | No | Number of items per page | |
| teamName | No | Team name (required). Use esa_get_teams first to see available teams. | |
| exactMatch | No | Filter paths matching exactly (e.g., 'dev/api' matches only 'dev/api', ignores leading/trailing slashes) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnlyHint=true, and the description adds behavioral details: pagination, lexicographic sorting, post counts, and filtering options. No contradictions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise with two sentences, front-loading the purpose and efficiently covering filtering and sorting. No redundant information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description explains the return type (pagination with post counts) and provides enough context for a read-only retrieval tool. It lacks details on pagination response structure but that is acceptable given the overall clarity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with detailed parameter descriptions. The tool description does not add significant new information about parameters beyond what the schema already provides, so baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool retrieves category paths for understanding overall category structure, and lists specific use cases like organization, cleanup, migration planning. It distinguishes from siblings like 'esa_get_categories' and 'esa_get_top_categories' by focusing on paths and filtering.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description specifies filtering capabilities and use cases, but does not explicitly state when not to use or compare with alternatives. However, the context signals and sibling list provide implicit guidance, and the description is clear on its niche.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
esa_get_attachmentGet attachment file from esaARead-only
Retrieves an attachment file from esa with signed URLs. For supported images (JPEG, PNG, GIF, WebP) under 30MB, returns base64-encoded data. For other file types, larger images, or when forceSignedUrl is true, returns signed URLs.
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | Attachment URL. Can be a full URL (https://files.esa.io/..., https://dl.esa.io/...) or a path (/uploads/...) | |
| teamName | No | Team name (required). Use esa_get_teams first to see available teams. | |
| forceSignedUrl | No | If true, always return signed URLs instead of base64-encoded images. Default is false. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare readOnlyHint true; description adds significant behavioral details about image support, size limits, and return formats (base64 vs signed URLs). No contradictions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences: first defines core purpose, second details conditions. Extremely concise and front-loaded with no wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Without an output schema, the description adequately explains return behavior for different cases (images vs other files, size limit, forceSignedUrl). Covers most scenarios an agent needs to know.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema covers 100% of parameters with descriptions. Description adds context on URL flexibility and teamName requirement, enhancing understanding beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states 'Retrieves an attachment file from esa with signed URLs', using a specific verb and resource. It distinguishes this tool from siblings like esa_get_post by focusing on attachment retrieval.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides explicit context on when base64 vs signed URLs are returned based on file type, size, and forceSignedUrl parameter. While not explicitly stating exclusions, the description offers clear conditions for use.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
esa_get_categoriesGet categories for a specific pathARead-only
Retrieves category information and subcategories for a specific category path, with optional posts and parent categories included
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Page number (starts from 1) | |
| select | Yes | Category path to retrieve | |
| include | No | Additional information to include | |
| perPage | No | Number of items per page | |
| teamName | No | Team name (required). Use esa_get_teams first to see available teams. | |
| descendantPosts | No | Include descendant posts (only effective with include=posts) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations declare readOnlyHint=true, and the description uses 'Retrieves', which is consistent. However, beyond confirming it's a read operation, the description adds little behavioral context such as authentication requirements, rate limits, or what happens if the path does not exist. The optional includes are mentioned but not explained in depth.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence that is front-loaded with the core action and resource. It contains no unnecessary words and is efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With 6 parameters and no output schema, the description is adequate but could be more complete. It does not explain pagination behavior (page, perPage), the effect of descendantPosts, or the return format. The schema provides parameter details, but the agent may lack context on how to compose a request or interpret results.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema covers all 6 parameters with descriptions, achieving 100% schema coverage. The description adds minimal extra meaning beyond the schema, only hinting at the 'include' parameter's effect. The baseline of 3 is appropriate since the schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'retrieves' and the resource 'category information and subcategories for a specific category path'. It also mentions the optional inclusion of posts and parent categories. This distinguishes it from siblings like esa_get_all_category_paths or esa_get_top_categories, which do not target a specific path or include posts.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for retrieving categories along a path, but it does not explicitly state when to use this tool versus alternatives like esa_get_top_categories or esa_get_all_category_paths. No when-not guidance or alternative mentions are present.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
esa_get_commentGet a specific commentARead-only
Retrieves a specific comment by comment ID, with optional stargazers included.
| Name | Required | Description | Default |
|---|---|---|---|
| include | No | Specify 'stargazers' to include stargazers in the response | |
| teamName | No | Team name (required). Use esa_get_teams first to see available teams. | |
| commentId | Yes | The comment ID to retrieve |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description is consistent with the readOnlyHint annotation (no contradiction). It adds minor context about optional stargazers but does not disclose other behavioral traits like rate limits or authentication requirements. Given annotations already declare safety, no further issues.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Single sentence that directly states purpose and optional feature. No redundant information. Front-loaded and efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only get-by-id tool with 3 parameters, the description covers the core action and optional inclusion. It does not describe return format, but given no output schema and tool simplicity, this is acceptable. Could mention that it returns a comment object for added clarity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3. The description adds value by explaining the optional 'include' parameter as 'stargazers' and provides guidance for 'teamName' (use esa_get_teams first). This goes beyond the schema's minimal descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description specifies the verb 'Retrieves' and the resource 'a specific comment by comment ID', clearly distinguishing it from sibling tools that list comments or perform mutations. It also mentions optional stargazers.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
While not explicitly stating when to use this tool vs alternatives, the description provides clear context: it is for retrieving a single comment by ID. The teamName parameter includes a usage hint to use esa_get_teams first, which aids correct invocation.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
esa_get_markdown_syntax_helpGet esa Markdown syntax documentationARead-only
Get esa Markdown and formatting documentation when unsure about syntax. Use this BEFORE using any tools with *_md parameters (like esa_create_post, esa_update_post, esa_create_comment, esa_update_comment) if you need clarification on Markdown syntax, esa-specific extensions, or formatting options.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true. The description adds that it is a preparatory step for other tools, reinforcing its safe, read-only nature. No contradictions; additional context about its role in the workflow is provided.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences: first states purpose, second provides usage guidance. Every sentence adds value without redundancy. Front-loaded with the action, no wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the simplicity (no parameters, no output schema), the description is complete. It states what it does, when to use it, and references sibling tools. Could mention what form the documentation takes, but not necessary for correctness.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
No parameters exist, and schema coverage is 100%. The description correctly adds no parameter info since there are none. Baseline for zero-parameter tools is 4, and the description meets it without needing to compensate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool retrieves Markdown and formatting documentation when unsure about syntax. It distinguishes itself from sibling tools by specifying it's a help resource for tools with *_md parameters, using concrete examples.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit usage guidance: 'Use this BEFORE using any tools with *_md parameters' and lists specific tools (esa_create_post, etc.). Also specifies the condition: 'if you need clarification on Markdown syntax, esa-specific extensions, or formatting options.' This provides clear when-to-use and implied when-not.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
esa_get_postGet a specific esa postARead-only
Retrieves a specific post from an esa team by post number. The response always includes backlinks_count (the number of posts referencing this one). To list the referencing posts themselves, use esa_get_post_backlinks. To fetch comments, use esa_get_post_comments.
| Name | Required | Description | Default |
|---|---|---|---|
| teamName | No | Team name (required). Use esa_get_teams first to see available teams. | |
| truncate | No | Whether to truncate body_md to avoid overwhelming the agent context (default: true). If the response ends with '... (truncated)' and you need the full body (e.g. before calling esa_update_post to preserve the tail), retry with truncate: false. body_md_stats reports the full body's character and line counts even when truncated. | |
| postNumber | Yes | The post number to retrieve |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare readOnlyHint=true, consistent with retrieval. Description adds behavioral details: response always includes backlinks_count, explains truncate behavior (default true, truncation indicator, retry advice), and notes body_md_stats reporting full counts even when truncated.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The core description is concise (3 sentences, front-loaded). Parameter descriptions are somewhat verbose but necessary for clarity. No wasted sentences. Slightly penalized for length in schema descriptions, but overall well-structured.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (3 parameters, no output schema), the description is complete. It covers purpose, usage, behavioral details (truncation, backlinks_count), and references sibling tools for extended functionality. No gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, but description adds significant value beyond field names. For truncate: explains default, truncation indicator, and retry condition. For teamName: provides prerequisite guidance. For postNumber: clear. This enriches the schema definitions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Retrieves a specific post from an esa team by post number', specifying the verb, resource, and key identifier. It distinguishes from siblings by explicitly naming esa_get_post_backlinks for referencing posts and esa_get_post_comments for comments.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides explicit guidance on when to use this tool versus alternatives: 'To list the referencing posts themselves, use esa_get_post_backlinks. To fetch comments, use esa_get_post_comments.' Also implicitly guides team selection via schema description: 'Use esa_get_teams first to see available teams.'
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
esa_get_post_backlinksGet backlinks for a specific postARead-only
Retrieves a paginated list of posts that reference (link back to) the specified post. Archived posts and WIP posts are excluded. Results are ordered by backlink registration date (newest references first).
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Page number (starts from 1) | |
| perPage | No | Number of items per page | |
| teamName | No | Team name (required). Use esa_get_teams first to see available teams. | |
| postNumber | Yes | The post number to get backlinks for |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Expands beyond the readOnlyHint annotation by detailing pagination, exclusion of archived/WIP posts, and ordering by newest references first, providing useful behavioral context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two concise sentences with no redundancy, front-loading key information about retrieval, exclusions, and ordering.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Describes the list content and ordering well, but lacks details on return fields or structure since no output schema is provided, leaving some ambiguity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with descriptions; the description adds context for pagination but does not significantly enhance parameter understanding beyond what the schema provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states it retrieves a paginated list of posts referencing a specified post, including exclusions and ordering, which distinguishes it from sibling tools like esa_get_post or esa_search_posts.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Implies when to use (to find backlinks of a post) but lacks explicit alternatives or when not to use, such as comparing to esa_search_posts for content-based queries.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
esa_get_post_commentsGet comments for a specific postARead-only
Retrieves a list of comments for a specific post with pagination support.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Page number (starts from 1) | |
| perPage | No | Number of items per page | |
| teamName | No | Team name (required). Use esa_get_teams first to see available teams. | |
| postNumber | Yes | The post number to get comments for |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, consistent with 'Retrieves'. The description adds the behavioral detail of pagination support, which is not captured by annotations. No other behavioral traits are disclosed, but the tool is simple.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, concise sentence with no wasted words. It front-loads the action and resource.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity and the presence of a readOnly annotation, the description adequately covers the core functionality. It could mention that comments are returned in a list format, but the absence of an output schema and the focus on pagination make it complete enough.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3. The description does not elaborate on parameter details beyond the schema, but it does confirm pagination intent for page/perPage. No additional semantics are provided.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Retrieves'), the resource ('comments for a specific post'), and the feature ('pagination support'). It distinguishes from siblings like esa_get_comment (single comment) and esa_get_team_comments (comments for a team).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for listing comments on a post, but does not explicitly state when to use this tool versus alternatives (e.g., esa_get_comment for a single comment, esa_get_team_comments for broader scope). There is no when-not-to-use guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
esa_get_search_options_helpGet esa search options documentationARead-only
Get esa search syntax documentation when you need to construct complex search queries. Use this BEFORE esa_search_posts if you're unsure how to translate user's search requirements into proper esa query syntax (e.g., date ranges, tag filters, category searches, advanced operators).
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, so description adds that it's a documentation retrieval tool. No additional behavioral details beyond the read-only nature, but no contradiction.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with the core purpose, and the second sentence provides usage guidance and examples. Every word adds value; no redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only tool with no parameters and no output schema, the description fully tells the agent what the tool does, when to use it, and what it covers. No gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
No parameters exist (0 params, schema coverage 100%), so baseline is 4. The description adds value by explaining what the documentation covers (e.g., 'date ranges, tag filters, category searches, advanced operators').
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it provides 'esa search syntax documentation' and is used for constructing complex search queries. It distinguishes itself from sibling tools by specifying 'Use this BEFORE esa_search_posts'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly instructs when to use: 'when you need to construct complex search queries' and 'if you're unsure how to translate user's search requirements'. Provides examples of what it covers (date ranges, tag filters, etc.) and explicitly names the alternative tool (esa_search_posts) and the order to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
esa_get_team_commentsGet team commentsBRead-only
Retrieves a list of comments in a team with pagination support.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Page number (starts from 1) | |
| perPage | No | Number of items per page | |
| teamName | No | Team name (required). Use esa_get_teams first to see available teams. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The readOnlyHint annotation already declares it as safe, but the description adds only pagination support. No mention of rate limits, authentication, or side effects beyond the annotation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence with no unnecessary words, efficiently communicating the core function.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool has no output schema, and the description does not describe the structure of returned comments, ordering, or default pagination values, leaving the agent uninformed about the response format.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already fully documents the parameters. The tool description adds no additional parameter meaning beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'retrieves' and the resource 'list of comments in a team', distinguishing it from sibling tools like 'esa_get_comment' (single comment) and 'esa_get_post_comments' (comments for a post).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description includes a hint in the schema for teamName ('Use esa_get_teams first to see available teams') but does not explicitly state when to use this tool versus alternatives, nor when not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
esa_get_team_membersGet team membersBRead-only
Retrieves all members of a team with their roles and profile information
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Page number (starts from 1) | |
| sort | No | Sort criteria | |
| order | No | Sort order | |
| perPage | No | Number of items per page | |
| teamName | No | Team name (required). Use esa_get_teams first to see available teams. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already disclose readOnlyHint=true, so the readonly behavior is known. The description adds that it returns members with roles and profiles, but misses behavioral details like pagination (page, perPage, sort, order) or that teamName is effectively required.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise at one sentence with no waste. However, it could be slightly more informative without losing brevity, such as mentioning teamName is required.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no output schema, the description hints at return structure ('members with roles and profile') but lacks details on pagination or order. The schema covers parameters well, but the tool's behavior (e.g., teamName requirement) could be clearer.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so parameters are well-documented. The description adds no additional meaning beyond what's in the schema, which aligns with the baseline score of 3.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'retrieves', resource 'members', and what is included ('roles and profile information'). However, it does not explicitly differentiate from sibling tools like esa_get_teams or esa_get_team_stats, though the name is self-explanatory.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit guidance on when to use this tool versus alternatives. The schema hint for teamName ('Use esa_get_teams first to see available teams') is embedded but not part of the description, and no when-not-to-use context is provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
esa_get_teamsGet user's accessible esa teamsARead-only
Retrieves a list of esa teams that the user has access to.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Page number (starts from 1) | |
| role | No | Filter by role | |
| perPage | No | Number of items per page |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already provide readOnlyHint. The description adds context about access filtering but does not disclose pagination behavior or any rate limits, which is acceptable for a simple retrieval tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Single sentence, front-loaded with verb and resource, no wasted words. Highly concise.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple list tool with optional parameters, the description is adequate. It could state that pagination is supported (implied by params) or describe the response structure, but it's complete enough.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema fully documents the parameters. The description adds no additional parameter-level detail, so baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action (retrieves), resource (esa teams), and scope (that the user has access to). It distinguishes well from sibling tools that deal with other entities like comments or members.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool versus alternatives. For example, it does not mention that this lists all accessible teams, while esa_get_team_members would be for members of a specific team.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
esa_get_team_statsGet team statisticsARead-only
Retrieves team statistics including member count, posts count (total/WIP/shipped), comments, stars, watches, and daily/weekly/monthly active users
| Name | Required | Description | Default |
|---|---|---|---|
| teamName | No | Team name (required). Use esa_get_teams first to see available teams. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations indicate readOnlyHint=true, and the description confirms it's a retrieval operation. It adds value by listing the specific statistics returned. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, well-formed sentence that front-loads the purpose and lists all information concisely without unnecessary words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (one parameter, read-only statistics), the description covers purpose, parameter usage, and return contents. No output schema exists, but the description compensates by listing stat types.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description adds meaningful context to the single parameter 'teamName', stating it is required and suggesting to use esa_get_teams first. This goes beyond the schema description.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'Retrieves' and the resource 'team statistics', listing specific metrics (member count, posts, comments, etc.). It distinguishes from sibling tools like esa_get_teams or esa_get_team_members by focusing on statistics.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for retrieving team stats but does not explicitly state when to use this tool versus alternatives like esa_get_team_members. No exclusions or when-not-to-use guidance is provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
esa_get_team_tagsGet team tagsARead-only
Retrieves all tags used in posts within a team, along with the count of posts for each tag
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Page number (starts from 1) | |
| perPage | No | Number of items per page | |
| teamName | No | Team name (required). Use esa_get_teams first to see available teams. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, so the description's 'Retrieves' is consistent. It adds value by specifying that the response includes tag counts, providing richer behavioral context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Single sentence, front-loaded with action and result, no wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Lacks output schema but description adequately explains return value (tags with counts). For a simple list, this is sufficient; however, more detail on pagination structure would improve completeness.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so parameters are well documented. The description does not add new meaning to parameters, but aligns with schema by implying pagination and team filtering.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses specific verb 'Retrieves' and resource 'tags used in posts within a team', clearly distinguishing from sibling tools like esa_search_posts or esa_get_post which focus on different operations.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit guidance on when to use this tool vs alternatives. The description implies the tool is for reading tags, but does not compare to similar operations like searching posts by tag.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
esa_get_top_categoriesGet top-level categoriesCRead-only
Retrieves all top-level categories for a team
| Name | Required | Description | Default |
|---|---|---|---|
| teamName | No | Team name (required). Use esa_get_teams first to see available teams. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, so the safety profile is clear. However, the description adds no further behavioral details (e.g., response format, pagination, or ordering), leaving the agent to infer behavior beyond the read-only nature.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, efficient sentence with no wasted words. However, it could benefit from slightly more context to improve completeness without becoming verbose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only tool with one parameter and no output schema, the description is functional but incomplete. It does not explain what 'top-level' means or the structure of the response, and it lacks guidance on when to use it over similar category tools.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% for the single parameter (teamName), and the schema already includes a note about using esa_get_teams first. The tool description adds no additional parameter meaning, so baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Retrieves') and resource ('all top-level categories for a team'), making the purpose unambiguous. However, it does not explicitly differentiate from sibling tools like esa_get_categories or esa_get_all_category_paths, which could lead to confusion about scope.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus alternatives such as esa_get_categories or esa_get_all_category_paths. The schema hints to use esa_get_teams first, but this is tied to the parameter rather than overall usage context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
esa_prepend_postPrepend content to an existing esa postADestructive
Prepends Markdown content to the beginning of an existing post's body, saving it as a new revision. Unlike esa_update_post, this does not require fetching the current body first. Behaves the same as esa_append_post except content is inserted at the start of the body. Optionally set wip to change the WIP state.
| Name | Required | Description | Default |
|---|---|---|---|
| wip | No | WIP state after the insert. Defaults to the post's current WIP state | |
| content | Yes | The Markdown content to insert. Use 4 spaces for indentation. Line endings are normalized to LF. Include a blank line at the boundary to insert it as a separate block. | |
| message | No | Change message. Defaults to "Updated via API." when omitted | |
| teamName | No | Team name (required). Use esa_get_teams first to see available teams. | |
| postNumber | Yes | The post number to add content to |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Description adds behavioral context: no need to fetch current body, same as append but at start, optionally set wip. Annotations already indicate destructiveHint=true, which aligns with the operation. No contradiction.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three well-structured sentences, front-loaded with purpose. No unnecessary details; every sentence adds value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (5 params, no output schema), the description covers action, siblings, parameter tips, and prerequisite (teamName via esa_get_teams). Complete for agent selection and invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, but the description adds extra semantics for 'content' parameter (4 spaces indentation, LF normalization, blank line for block) and clarifies defaults for 'wip' and 'message'. Provides value beyond schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it prepends Markdown content to an existing post's body as a new revision. It distinguishes itself from esa_update_post (no need to fetch body) and esa_append_post (prepend vs append).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explains when to use it over esa_update_post and esa_append_post. It does not explicitly state when not to use it, but the context is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
esa_rollback_post_revisionRoll back a post to a previous revisionBDestructive
Rolls back a post to the specified revision, saving the restored content as a new revision.
| Name | Required | Description | Default |
|---|---|---|---|
| wip | No | WIP state after rollback. Defaults to the target revision's WIP state | |
| message | No | Change message for the rollback | |
| teamName | No | Team name (required). Use esa_get_teams first to see available teams. | |
| postNumber | Yes | The post number to roll back | |
| revisionNumber | Yes | The revision number to roll back to, e.g. the revision_number from esa_get_post before your edits |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotation indicates destructiveHint: true, so the description must clarify the destructive nature. It says 'saving the restored content as a new revision,' which is ambiguous about whether the current content is overwritten or preserved. The description does not fully disclose that the rollback replaces the current content, potentially losing unrevisioned changes. This is insufficient given the destructive annotation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence, concise and front-loaded with the key action and resource. It avoids unnecessary words, but could include more detail without becoming verbose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the complexity of a destructive rollback operation with multiple parameters and no output schema, the description is too minimal. It does not explain the behavior of the current post content, the reversibility of the rollback, or what the tool returns (e.g., the updated post or a success flag). This lacks completeness for an AI agent to use confidently.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the descriptions in the input schema are thorough. The tool description adds minimal additional semantic value, such as 'saving... as a new revision,' but mostly restates the schema. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('rolls back') and the resource ('a post to the specified revision'), and it saves the restored content as a new revision. This distinguishes it from editing or posting actions, but does not explicitly differentiate from sibling tools like esa_update_post.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description does not explicitly state when to use this tool vs alternatives. However, the parameter 'revisionNumber' hints at getting the revision from esa_get_post before edits, implying the usage context. But no direct guidelines on when to use or when not to use are provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
esa_search_helpSearch esa documentation and helpARead-only
Search esa documentation for features, terminology, and specifications. Use this when users mention esa-specific terms, ask about esa functionality, or request help with esa workflows that you're not familiar with.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Page number | |
| query | Yes | Search query string. Use specific terms, not wildcards like "*". Empty string returns all posts. ## Important Note for Date Queries: **WARNING: Do NOT use 'after:', 'before:', 'since:', or 'until:' syntax (these are from GitHub/Gmail/pplog). Use esa-specific date syntax: created:>YYYY-MM-DD, created:<YYYY-MM-DD, updated:>YYYY-MM-DD, updated:<YYYY-MM-DD ## Important Note for Relative Date Queries: **CRITICAL: Always get today's actual date from the system before processing relative date queries (e.g., "today", "yesterday", "last week", "recent"). When searching, apply these strategies: 1. Convert concepts to technical terms (e.g., general descriptions → specific property names, method names, or technical keywords) 2. Translate between Japanese and English technical terms (e.g., Japanese concepts → English API/property names) 3. Expand to related technical elements (e.g., one concept → multiple implementation approaches, related technologies, or alternative solutions) IMPORTANT: Space-separated terms are treated as AND conditions. Use "OR" operator for alternative terms: "word-break OR word-wrap OR overflow-wrap". Advanced search: "tag:release", "category:dev", "wip:false", "keyword:API", "title:設計書". Category search: "on:category" (posts directly in category), "in:category" (posts in category and subcategories), "on:/" (uncategorized posts). For broader results, use OR between related terms rather than listing them with spaces. | |
| perPage | No | Items per page |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare readOnlyHint=true, and the description confirms this is a read-only search tool. The description adds context about searching documentation rather than posts, which is beyond what annotations alone provide.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences with the first sentence front-loading the purpose. It is concise but the second sentence is somewhat lengthy; still, no superfluous information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the annotations and schema, the description is complete enough for a search tool. It does not explain return format, but that is common knowledge for search results. The tool's simplicity does not require extensive additional context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with detailed parameter descriptions including warnings about date syntax. The tool description itself does not add additional parameter meaning beyond what the schema already provides, so baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool searches 'esa documentation for features, terminology, and specifications', distinguishing it from sibling tools like esa_search_posts which searches actual posts. The verb 'search' and resource 'documentation' are specific and unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly tells when to use this tool: when users mention esa-specific terms, ask about functionality, or need help with workflows. It does not explicitly state when not to use it, but the sibling list provides alternatives like esa_search_posts for general post searching.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
esa_search_postsSearch PostsARead-only
Search for posts in esa.io
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Page number | |
| sort | No | Sort key | |
| order | No | Sort direction | |
| query | Yes | Search query string. Use specific terms, not wildcards like "*". Empty string returns all posts. ## Important Note for Date Queries: **WARNING: Do NOT use 'after:', 'before:', 'since:', or 'until:' syntax (these are from GitHub/Gmail/pplog). Use esa-specific date syntax: created:>YYYY-MM-DD, created:<YYYY-MM-DD, updated:>YYYY-MM-DD, updated:<YYYY-MM-DD ## Important Note for Relative Date Queries: **CRITICAL: Always get today's actual date from the system before processing relative date queries (e.g., "today", "yesterday", "last week", "recent"). When searching, apply these strategies: 1. Convert concepts to technical terms (e.g., general descriptions → specific property names, method names, or technical keywords) 2. Translate between Japanese and English technical terms (e.g., Japanese concepts → English API/property names) 3. Expand to related technical elements (e.g., one concept → multiple implementation approaches, related technologies, or alternative solutions) IMPORTANT: Space-separated terms are treated as AND conditions. Use "OR" operator for alternative terms: "word-break OR word-wrap OR overflow-wrap". Advanced search: "tag:release", "category:dev", "wip:false", "keyword:API", "title:設計書". Category search: "on:category" (posts directly in category), "in:category" (posts in category and subcategories), "on:/" (uncategorized posts). For broader results, use OR between related terms rather than listing them with spaces. | |
| perPage | No | Items per page | |
| teamName | No | Team name (required). Use esa_get_teams first to see available teams. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare readOnlyHint=true, making the read-only nature clear. The description adds little beyond that—no mention of rate limits, pagination behavior, or data scope. The query parameter notes provide some context on behavior but not enough to raise the score.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence—'Search for posts in esa.io'—which is perfectly concise and front-loaded. Despite long parameter descriptions, the main description wastes no words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a search tool with 6 parameters and no output schema, the parameter descriptions cover query syntax and pagination. Missing explicit return format but overall adequate given the read-only annotation and schema coverage.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so baseline is 3. The query parameter description adds significant value with detailed syntax rules, date handling, and advanced search operators, going well beyond the schema. Other parameters remain at schema level.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Search for posts in esa.io', which identifies the verb and resource. However, it does not differentiate from sibling search-related tools like esa_search_help or esa_get_post, leaving some ambiguity about scope.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description itself lacks usage guidance, but the parameter descriptions provide extensive context on when to use specific query syntax (e.g., avoiding GitHub date syntax) and how to handle relative dates. No explicit when-not or alternatives are given in the main description.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
esa_ship_postShip a postADestructive
Ships a post by setting wip to false. This marks the post as complete and ready to be published. Use this only when you need to ship without making other changes - if you're also updating title, content, or other fields, use esa_update_post with wip: false instead.
| Name | Required | Description | Default |
|---|---|---|---|
| teamName | No | Team name (required). Use esa_get_teams first to see available teams. | |
| postNumber | Yes | The post number to ship |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations provide destructiveHint, and the description adds context that setting wip to false marks the post as complete and ready to publish, revealing the exact behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, no unnecessary words, front-loaded with the core action and usage conditions.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given only 2 parameters, no output schema, and destructiveHint annotation, the description fully covers purpose, usage, and behavioral context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with adequate descriptions for teamName and postNumber; the tool description does not add extra parameter information beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool ships a post by setting wip to false, distinguishing it from sibling esa_update_post which is for combined updates.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states when to use (only for shipping without other changes) and when not (use esa_update_post with wip:false for combined updates), providing clear alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
esa_update_commentUpdate an existing commentBDestructive
Updates an existing comment in an esa team by comment ID.
| Name | Required | Description | Default |
|---|---|---|---|
| user | No | Comment author's screen_name (owner permission required) | |
| bodyMd | Yes | The updated comment content in Markdown format. Use 4 spaces for indentation. | |
| teamName | No | Team name (required). Use esa_get_teams first to see available teams. | |
| commentId | Yes | The comment ID to update |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already provide destructiveHint: true, so the description's 'updates' aligns. No additional behavioral details beyond what annotations cover.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Single sentence with no waste. Could add brief usage context but efficient for the minimal information needed.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Lacks return value description, error conditions, or how to obtain the comment ID. With no output schema and only sparse context, the description is incomplete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with clear parameter descriptions. The tool description adds no extra meaning, so baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states verb 'updates', resource 'existing comment', and identifier 'by comment ID'. Distinguishes from sibling tools like esa_create_comment and esa_delete_comment.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool versus alternatives. No mention of prerequisites (e.g., needing a valid comment ID) or when not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
esa_update_postUpdate an existing esa postADestructive
Updates an existing post in an esa team by post number. You can update the title, content, tags, category, and WIP status. To ship a post (mark as complete), set wip to false - this is preferred over using esa_ship_post when updating other fields simultaneously. To only add content to the start or end of the body, use esa_append_post or esa_prepend_post instead.
| Name | Required | Description | Default |
|---|---|---|---|
| wip | No | Whether the post is Work In Progress. Set to false to ship it (mark as complete and ready to be published) | |
| name | No | The post name (title) | |
| tags | No | Tags for the post | |
| bodyMd | No | The post content in Markdown format. Use 4 spaces for indentation. | |
| message | No | Update message for the post | |
| category | No | Category path (e.g., 'dev/docs') | |
| teamName | No | Team name (required). Use esa_get_teams first to see available teams. | |
| postNumber | Yes | The post number to update | |
| originalRevision | No | Original revision to check for conflicts |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true, so the description only needs to add context beyond that. It explains that updating can include shipping by setting wip to false, which is helpful. However, it does not explicitly mention that the tool modifies existing data, but the word 'updates' implies mutation. No contradiction.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences long, no wasted words. It front-loads the core purpose and immediately follows with usage guidance and alternatives. Very efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema exists, but the tool is a standard mutation; agents might infer the returned object. The description adequately covers usage and parameter semantics but does not mention return value. Given the tool's complexity (9 params, nested objects), the description is largely complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so each parameter has a description. The description adds value by clarifying that 'set wip to false' ships the post and recommends using esa_get_teams for teamName. This extra context raises the score above the baseline of 3.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool updates an existing post, naming the updatable fields (title, content, tags, etc.). It distinguishes from sibling tools by explicitly mentioning esa_append_post, esa_prepend_post, and esa_ship_post.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit guidance on when to use this tool over alternatives: shipping a post via 'set wip to false' is preferred over esa_ship_post when updating other fields simultaneously, and append/prepend should be used for adding content to start or end.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
TDQS
Each tool targets a distinct operation or resource (post, comment, team, attachment, search, help). Potential overlaps like append vs prepend are clearly differentiated by direction, and ship vs update by usage intent. Tool descriptions explicitly clarify when to use alternatives.
All tools follow the 'esa_verb_noun' pattern with underscores (e.g., esa_create_post, esa_get_post_backlinks). Compound names are uniformly constructed (e.g., esa_get_all_category_paths). No mixing of casing or styles.
28 tools is slightly above the typical 'well-scoped' range (3-15), but each tool corresponds to a specific API action for esa.io's feature set. The count reflects the breadth of the platform without being excessive or redundant.
Full lifecycle coverage for posts (create, read, update, archive, duplicate, ship, rollback, append/prepend) and comments (CRUD + list). Includes team stats, members, tags, categories, attachments, search, and help tools. No obvious gaps for typical usage.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
Access the GitHub API, enabling file operations, repository management, search functionality, and…
Connect AI to your flomo notes. Search, create, edit notes and manage tags via MCP.
Create and manage MeisterTask projects, tasks, and notes from your AI assistant.
Read teams, spaces, lists and tasks; create, update and comment on tasks and track time.
Related MCP Servers
- AlicenseBqualityCmaintenanceEnables interaction with esa.io's API through the Model Context Protocol, supporting article search and retrieval with a compliant MCP interface.72337MIT
- AlicenseBqualityCmaintenanceEnables integration with Kibela API for searching and retrieving notes, allowing LLMs to interact with Kibela content seamlessly.12307MIT
- AlicenseBqualityDmaintenanceEnables interaction with Qiita, a Japanese developer community platform, through its API v2. Supports comprehensive operations including article management, user interactions, tag following, and commenting with Japanese language support.30171MIT
- AlicenseBqualityBmaintenanceEnables interaction with note.com through API to search and read articles, manage posts and drafts, handle comments and likes, retrieve analytics, and access membership information.3320129ISC
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/esaio/esa-mcp-server'
If you have feedback or need assistance with the MCP directory API, please join our Discord server