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 分