esa MCP Server
OfficialThis MCP server connects AI assistants to esa.io for reading, searching, creating, updating, and managing esa content.
Manage teams: list accessible teams, team stats, tags, and members.
Manage posts: search, retrieve, create, update, append/prepend, archive, ship, duplicate, roll back revisions, and view backlinks.
Manage comments: get, create, update, delete, and list comments by post or team.
Manage categories: list top-level, path-specific, and all category paths with filtering.
Retrieve attachments as base64 images or signed URLs.
Access recent posts via the
esa_recent_postsresource.Use the
esa_summarize_postprompt to summarize a post.Get help on esa search syntax, Markdown syntax, and documentation.
Click on "Deploy 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 Server Show 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_rollback_post_revision- 記事を指定したリビジョンにロールバック(復元した内容は新しいリビジョンとして保存。リビジョン番号はesa_get_postのrevision_numberで確認可能)
コメント管理
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.
Inputs: content (required), postNumber (required), wip, message, +1 more.
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'.
Inputs: postNumber (required), message, teamName.
esa_create_commentCreate a new comment on a postB
Creates a new comment on an existing post in an esa team.
Inputs: bodyMd (required), postNumber (required), user, teamName.
esa_create_postCreate a new esa postC
Creates a new post in an esa team with optional tags, category, and WIP status.
Inputs: name (required), wip, tags, bodyMd, +3 more.
esa_delete_commentDelete a commentCDestructive
Deletes a comment from an esa team by comment ID.
Inputs: commentId (required), teamName.
esa_duplicate_postDuplicate a postA
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.
Inputs: postNumber (required), teamName, targetTeamName.
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.
Inputs: page, match, prefix, suffix, +3 more.
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.
Inputs: url (required), teamName, forceSignedUrl.
esa_get_categoriesGet categories for a specific pathBRead-only
Retrieves category information and subcategories for a specific category path, with optional posts and parent categories included
Inputs: select (required), page, include, perPage, +2 more.
esa_get_commentGet a specific commentARead-only
Retrieves a specific comment by comment ID, with optional stargazers included.
Inputs: commentId (required), include, teamName.
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.
Inputs: no named parameters.
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.
Inputs: postNumber (required), teamName, truncate.
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).
Inputs: postNumber (required), page, perPage, teamName.
esa_get_post_commentsGet comments for a specific postBRead-only
Retrieves a list of comments for a specific post with pagination support.
Inputs: postNumber (required), page, perPage, teamName.
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).
Inputs: no named parameters.
esa_get_team_commentsGet team commentsBRead-only
Retrieves a list of comments in a team with pagination support.
Inputs: page, perPage, teamName.
esa_get_team_membersGet team membersBRead-only
Retrieves all members of a team with their roles and profile information
Inputs: page, sort, order, perPage, +1 more.
esa_get_teamsGet user's accessible esa teamsARead-only
Retrieves a list of esa teams that the user has access to.
Inputs: page, role, perPage.
esa_get_team_statsGet team statisticsBRead-only
Retrieves team statistics including member count, posts count (total/WIP/shipped), comments, stars, watches, and daily/weekly/monthly active users
Inputs: teamName.
esa_get_team_tagsGet team tagsBRead-only
Retrieves all tags used in posts within a team, along with the count of posts for each tag
Inputs: page, perPage, teamName.
esa_get_top_categoriesGet top-level categoriesBRead-only
Retrieves all top-level categories for a team
Inputs: teamName.
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.
Inputs: content (required), postNumber (required), wip, message, +1 more.
esa_rollback_post_revisionRoll back a post to a previous revisionADestructive
Rolls back a post to the specified revision, saving the restored content as a new revision.
Inputs: postNumber (required), revisionNumber (required), wip, message, +1 more.
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.
Inputs: query (required), page, perPage.
esa_search_postsSearch PostsCRead-only
Search for posts in esa.io
Inputs: query (required), page, sort, order, +2 more.
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.
Inputs: postNumber (required), teamName.
esa_update_commentUpdate an existing commentCDestructive
Updates an existing comment in an esa team by comment ID.
Inputs: bodyMd (required), commentId (required), user, teamName.
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.
Inputs: postNumber (required), wip, name, tags, +5 more.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
TDQS
Scored across 28 tools
Most tools are clearly distinct by resource and action, and the descriptions explicitly clarify overlaps such as update_post vs ship_post vs append/prepend. The main mild ambiguity is among category retrieval tools (get_categories, get_all_category_paths, get_top_categories), though their descriptions differentiate them reasonably well.
All tools use a consistent esa_ prefix, snake_case naming, and verb_noun structure (get_, create_, update_, delete_, search_, append_, etc.). The pattern is predictable throughout the entire set.
At 28 tools, the surface is heavy and exceeds the typical well-scoped range. While many tools correspond to real esa.io resources and workflows, the set feels inflated by multiple specialized help and category tools, making it cumbersome for an agent to navigate.
The server covers core post, comment, team, category, and search workflows well, including lifecycle operations like archive, ship, duplicate, and revision rollback. Minor gaps remain, such as no explicit post deletion tool (though archive may suffice) and limited attachment handling beyond retrieval.
Maintenance
Related MCP Connectors
Connect AI agents to Exa for web search, content fetching, and multi-step research.
Manage Redbooth tasks, task lists, comments, tags and files from Claude and other AI assistants.
Company brain for teams and AI: read and write goals, to-dos, comments, and knowledge.
Task management for people and AI agents, with scoped OAuth access to issues, projects, and docs.
Related MCP Servers
- AlicenseBqualityDmaintenanceEnables interaction with esa.io's API through the Model Context Protocol, supporting article search and retrieval with a compliant MCP interface.756 npm37MIT
- AlicenseBqualityCmaintenanceEnables integration with Kibela API for searching and retrieving notes, allowing LLMs to interact with Kibela content seamlessly.12241 npm7MIT
- 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.305 npm1MIT
- AlicenseBqualityCmaintenanceEnables 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.33101 npm31ISC