esa

io.github.esaio由 GitHub 账号 esaio 发布v0.15.2更新于 Oct 30, 2026

Official MCP server for esa.io - a documentation sharing service for teams

概览

AI 生成的概览

esa.io 官方 MCP 服务器,让助手搜索、读取、创建、更新并整理团队文档文章、评论、分类与附件。

可以做什么
  • 搜索并读取文章,含反向链接、评论与修订号
  • 创建、更新、追加、前插、复制、发布、归档与回滚文章
  • 读取、新增、编辑与删除文章评论
  • 浏览团队信息、统计、标签、成员与分类路径
  • 以 base64 数据或短期签名链接获取附件
  • 查询 esa 搜索语法、Markdown 语法与文档帮助
适用场景
适合团队把文档、笔记和会议记录放在 esa.io,并希望助手在对话中直接查找、总结、补充或整理这些内容的场景。
运行要求
通过 npx(需 Node.js)或 Docker 以 stdio 在本地运行。需要 esa.io 访问令牌,放在 ESA_ACCESS_TOKEN 环境变量中,需具备读写或等效权限,建议使用 PAT v2。可选 LANG 变量设置界面语言。仅支持桌面客户端。
安装前请注意
该令牌具有团队文章与评论的写入权限,助手可创建、编辑、归档、复制和删除内容;删除评论与归档文章属于破坏性或不易撤销的操作。附件以约五分钟有效的签名链接返回,文章内容会发送给模型提供方。

安装

在 SourceWeft 中

  1. 打开 控制台中的 esa,将其添加到工作区。
  2. 为需要使用其工具的对话启用该服务。

Desktop only,通过 STDIO。 STDIO 服务会启动本地进程,因此需要 SourceWeft 桌面宿主。

其他 MCP 客户端

参照 仓库 中的启动说明。

README

esa MCP Server

[License: MIT]

日本語 | English

esa.io の公式 MCP(Model Context Protocol)サーバー(STDIO Transport 版)

概要

AI アシスタントと情報共有サービス esa をつなぐ MCP サーバーです。Model Context Protocol 経由で、AI アシスタントから esa の記事を読んだり、作成・更新・管理などができます。

使えるツール

チーム管理

  • 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:member
    • PAT v2を推奨します。
  • LANG: UI の言語設定

Claude Desktop の例

claude_desktop_config.json への追加方法:

オプション 1: docker(推奨)
json
{  "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
json
{  "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 を同梱しており、登録されているツール / リソース / プロンプトの一覧を公開しています。サーバーを起動せずにプログラムから読み取れます:

js
import registry from "@esaio/esa-mcp-server/registry.json" with {  type: "json",};

スキーマ:

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 します。

リンク

サポート


Made with ❤️ by the esa team

来源:README.md,提交 7ae54eb

工具

28

esa_get_teams

Get user's accessible esa teams

Retrieves a list of esa teams that the user has access to.

输入参数pageroleperPage

esa_get_team_stats

Get team statistics

Retrieves team statistics including member count, posts count (total/WIP/shipped), comments, stars, watches, and daily/weekly/monthly active users

输入参数teamName

esa_get_team_tags

Get team tags

Retrieves all tags used in posts within a team, along with the count of posts for each tag

输入参数pageperPageteamName

esa_get_team_members

Get team members

Retrieves all members of a team with their roles and profile information

输入参数pagesortorderperPageteamName

esa_get_post

Get a specific esa post

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.

输入参数teamNametruncatepostNumber必填

esa_search_posts

Search Posts

Search for posts in esa.io

输入参数pagesortorderquery必填perPageteamName

esa_create_post

Create a new esa post

Creates a new post in an esa team with optional tags, category, and WIP status.

输入参数wipname必填tagsbodyMdmessagecategoryteamName

esa_update_post

Update an existing esa post

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.

输入参数wipnametagsbodyMdmessagecategoryteamNamepostNumber必填originalRevision

esa_append_post

Append content to an existing esa post

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.

输入参数wipcontent必填messageteamNamepostNumber必填

esa_prepend_post

Prepend content to an existing esa post

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.

输入参数wipcontent必填messageteamNamepostNumber必填

esa_get_comment

Get a specific comment

Retrieves a specific comment by comment ID, with optional stargazers included.

输入参数includeteamNamecommentId必填

esa_create_comment

Create a new comment on a post

Creates a new comment on an existing post in an esa team.

输入参数userbodyMd必填teamNamepostNumber必填

esa_update_comment

Update an existing comment

Updates an existing comment in an esa team by comment ID.

输入参数userbodyMd必填teamNamecommentId必填

esa_delete_comment

Delete a comment

Deletes a comment from an esa team by comment ID.

输入参数teamNamecommentId必填

esa_get_post_backlinks

Get backlinks for a specific post

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).

输入参数pageperPageteamNamepostNumber必填

esa_get_post_comments

Get comments for a specific post

Retrieves a list of comments for a specific post with pagination support.

输入参数pageperPageteamNamepostNumber必填

esa_get_team_comments

Get team comments

Retrieves a list of comments in a team with pagination support.

输入参数pageperPageteamName

esa_get_categories

Get categories for a specific path

Retrieves category information and subcategories for a specific category path, with optional posts and parent categories included

输入参数pageselect必填includeperPageteamNamedescendantPosts

esa_get_top_categories

Get top-level categories

Retrieves all top-level categories for a team

输入参数teamName

esa_get_all_category_paths

Get category paths with pagination

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.

输入参数pagematchprefixsuffixperPageteamNameexactMatch

esa_archive_post

Archive a post

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'.

输入参数messageteamNamepostNumber必填

esa_ship_post

Ship a post

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.

输入参数teamNamepostNumber必填

esa_duplicate_post

Duplicate a post

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.

输入参数teamNamepostNumber必填targetTeamName

esa_rollback_post_revision

Roll back a post to a previous revision

Rolls back a post to the specified revision, saving the restored content as a new revision.

输入参数wipmessageteamNamepostNumber必填revisionNumber必填

esa_get_search_options_help

Get esa search options documentation

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).

无需输入参数。

esa_get_markdown_syntax_help

Get esa Markdown syntax documentation

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.

无需输入参数。

esa_search_help

Search esa documentation and help

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.

输入参数pagequery必填perPage

esa_get_attachment

Get attachment file from esa

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.

输入参数url必填teamNameforceSignedUrl

版本历史

3
  1. v0.15.2最新Oct 30, 2026
  2. v0.15.0Oct 16, 2026
  3. v0.13.0Sep 16, 2026

评分

已满足适用检查项的 90%

该评分衡量此收录条目的完整程度,依据注册中心条目、端点与公开来源计算得出。它不是对服务器本身的评价,也不表示服务器安全或当前可用:可连通性是带日期的检查结果,评分也不包含安装量或用户评价。

  • 近 30 天内可连通25 分
  • 已声明认证方式10 分

    请在注册中心条目中声明凭据请求头,或保持端点能够响应探测,以便判定其认证方式。

  • 已列出工具必需15 分
  • 描述必需15 分
  • 图标10 分
  • 文档15 分
  • 许可证10 分