esa MCP Server
OfficialServer Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| LANG | No | UI language setting (e.g., 'ja' for Japanese) | ja |
| ESA_ACCESS_TOKEN | Yes | Personal access token for esa.io with scopes: read write or admin:comment read:post write:post read:category read:tag read:attachment read:team read:member |
Capabilities
Features and capabilities supported by this server
| Capability | Details |
|---|---|
| tools | {
"listChanged": true
} |
| prompts | {
"listChanged": true
} |
| resources | {
"listChanged": true
} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| esa_get_teamsA | Retrieves a list of esa teams that the user has access to. |
| esa_get_team_statsA | Retrieves team statistics including member count, posts count (total/WIP/shipped), comments, stars, watches, and daily/weekly/monthly active users |
| esa_get_team_tagsA | Retrieves all tags used in posts within a team, along with the count of posts for each tag |
| esa_get_team_membersB | Retrieves all members of a team with their roles and profile information |
| esa_get_postA | 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. |
| esa_search_postsA | Search for posts in esa.io |
| esa_create_postB | Creates a new post in an esa team with optional tags, category, and WIP status. |
| esa_update_postA | 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. |
| esa_append_postA | 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. |
| esa_prepend_postA | 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. |
| esa_get_commentA | Retrieves a specific comment by comment ID, with optional stargazers included. |
| esa_create_commentC | Creates a new comment on an existing post in an esa team. |
| esa_update_commentB | Updates an existing comment in an esa team by comment ID. |
| esa_delete_commentA | Deletes a comment from an esa team by comment ID. |
| esa_get_post_backlinksA | 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). |
| esa_get_post_commentsA | Retrieves a list of comments for a specific post with pagination support. |
| esa_get_team_commentsB | Retrieves a list of comments in a team with pagination support. |
| esa_get_categoriesA | Retrieves category information and subcategories for a specific category path, with optional posts and parent categories included |
| esa_get_top_categoriesC | Retrieves all top-level categories for a team |
| esa_get_all_category_pathsA | 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. |
| esa_archive_postA | 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'. |
| esa_ship_postA | 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. |
| esa_duplicate_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. |
| esa_rollback_post_revisionB | Rolls back a post to the specified revision, saving the restored content as a new revision. |
| esa_get_search_options_helpA | 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_helpA | 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_helpA | 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. |
| esa_get_attachmentA | 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. |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
| esa_summarize_post | Summarize an esa post |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
Latest Blog Posts
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