esa

io.github.esaioPublished by GitHub account esaiov0.15.2Updated Oct 30, 2026

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

Overview

AI-generated overview

Official esa.io MCP server that lets an assistant search, read, create, update and organize team documentation posts, comments, categories and attachments.

What you can do
  • Search and read posts, including backlinks, comments and revision numbers
  • Create, update, append to, prepend to, duplicate, ship, archive and roll back posts
  • Read, create, update and delete comments on posts
  • Browse team info, statistics, tags, members and category paths
  • Fetch attachments as base64 data or short-lived signed URLs
  • Look up esa search syntax, Markdown syntax and documentation help
When to use it
Useful when a team keeps its documentation, notes and meeting logs in esa.io and wants an assistant to find, summarize, extend or reorganize that content without leaving the chat.
Requirements
Runs locally over stdio via npx (Node.js) or Docker. Requires an esa.io access token in the ESA_ACCESS_TOKEN environment variable, with read/write or equivalent scopes; a PAT v2 is recommended. Optional LANG variable sets UI language. Desktop client only.
Before you install
The token grants write access to team posts and comments, so the assistant can create, edit, archive, duplicate and delete content. Comment deletion and post archiving are destructive or hard to undo. Attachments are returned as signed URLs valid for about five minutes, and post content is sent to the model provider.

Installation

In SourceWeft

  1. Open esa in the dashboard and add it to a workspace.
  2. Enable the server for the chats that should use its tools.

Desktop only via STDIO. STDIO servers start a local process, so they need the SourceWeft desktop host.

Other MCP clients

Follow the launch instructions in the repository.

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

Source: README.md at commit 7ae54eb

Tools

28

esa_get_teams

Get user's accessible esa teams

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

ParameterspageroleperPage

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

ParametersteamName

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

ParameterspageperPageteamName

esa_get_team_members

Get team members

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

ParameterspagesortorderperPageteamName

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.

ParametersteamNametruncatepostNumberrequired

esa_search_posts

Search Posts

Search for posts in esa.io

ParameterspagesortorderqueryrequiredperPageteamName

esa_create_post

Create a new esa post

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

ParameterswipnamerequiredtagsbodyMdmessagecategoryteamName

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.

ParameterswipnametagsbodyMdmessagecategoryteamNamepostNumberrequiredoriginalRevision

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.

ParameterswipcontentrequiredmessageteamNamepostNumberrequired

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.

ParameterswipcontentrequiredmessageteamNamepostNumberrequired

esa_get_comment

Get a specific comment

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

ParametersincludeteamNamecommentIdrequired

esa_create_comment

Create a new comment on a post

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

ParametersuserbodyMdrequiredteamNamepostNumberrequired

esa_update_comment

Update an existing comment

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

ParametersuserbodyMdrequiredteamNamecommentIdrequired

esa_delete_comment

Delete a comment

Deletes a comment from an esa team by comment ID.

ParametersteamNamecommentIdrequired

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

ParameterspageperPageteamNamepostNumberrequired

esa_get_post_comments

Get comments for a specific post

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

ParameterspageperPageteamNamepostNumberrequired

esa_get_team_comments

Get team comments

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

ParameterspageperPageteamName

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

ParameterspageselectrequiredincludeperPageteamNamedescendantPosts

esa_get_top_categories

Get top-level categories

Retrieves all top-level categories for a team

ParametersteamName

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.

ParameterspagematchprefixsuffixperPageteamNameexactMatch

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

ParametersmessageteamNamepostNumberrequired

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.

ParametersteamNamepostNumberrequired

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.

ParametersteamNamepostNumberrequiredtargetTeamName

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.

ParameterswipmessageteamNamepostNumberrequiredrevisionNumberrequired

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

Takes no parameters.

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.

Takes no parameters.

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.

ParameterspagequeryrequiredperPage

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.

ParametersurlrequiredteamNameforceSignedUrl

Version history

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

Score

90% of the applicable checks met

How complete this listing is, computed from the registry entry, the endpoint and public sources. Not a rating of the server and not a statement that it is safe or working today: reachability is a dated check, and no installs or reviews go into the score.

  • Reached in the last 30 days25 pts
  • Auth declared10 pts

    Declare the credential headers in the registry entry, or keep the endpoint answering the probe so its auth can be classified.

  • Tools listedRequired15 pts
  • DescriptionRequired15 pts
  • Logo10 pts
  • Documentation15 pts
  • License10 pts