esa MCP Server

by kajirita2002
Verified
# esa MCP Server <img width="775" alt="スクリーンショット 2025-03-27 午後1 14 09" src="https://github.com/user-attachments/assets/e5f8f308-ed7a-4774-b3a3-9cc284ea7422" /> *Read this in [Japanese](README.ja.md)* ## Overview This server is an interface that uses the [Model Context Protocol (MCP)](https://github.com/anthropics/anthropic-cookbook/tree/main/model_context_protocol) to enable Claude AI to interact with the [esa API](https://docs.esa.io/posts/102). With this MCP server, Claude AI can perform operations such as searching, creating, and updating esa documents. <a href="https://glama.ai/mcp/servers/@kajirita2002/esa-mcp-server"> <img width="380" height="200" src="https://glama.ai/mcp/servers/@kajirita2002/esa-mcp-server/badge" alt="esa Server MCP server" /> </a> ## About the Repository This repository provides a standalone implementation of the esa MCP server. It integrates Claude AI with esa to streamline document management. ## Setup ### Prerequisites - Node.js 18 or higher - esa API access token - esa team name ### Installation ```bash # Install globally npm install -g @kajirita2002/esa-mcp-server # Or use directly with npx npx @kajirita2002/esa-mcp-server ``` ### Setting Environment Variables ```bash # Set environment variables export ESA_ACCESS_TOKEN="your_esa_access_token" export ESA_TEAM="your_team_name" ``` ### MCP Configuration Example If you're using this MCP server, add the following configuration to your `mcp_config.json` file: ```json "esa": { "command": "npx", "args": ["-y", "@kajirita2002/esa-mcp-server"], "env": { "ESA_ACCESS_TOKEN": "your_esa_access_token", "ESA_TEAM": "your_team_name" } } ``` ### Starting the Server ```bash # Start the server npm start ``` ## Available Tools This MCP server provides the following tools: ### Post Related 1. `esa_list_posts` - Get a list of posts in the team - Input: - `q` (string, optional): Search query - `include` (string, optional): Related data to include in the response (e.g. 'comments,stargazers') - `sort` (string, optional): Sort method (updated, created, number, stars, watches, comments, best_match) - `order` (string, optional): Sort order (desc, asc) - `per_page` (number, optional): Number of results per page (max: 100) - `page` (number, optional): Page number to retrieve 2. `esa_get_post` - Get detailed information about a specific post - Input: - `post_number` (number, required): Post number to retrieve - `include` (string, optional): Related data to include in the response (e.g. 'comments,stargazers') 3. `esa_create_post` - Create a new post - Input: - `name` (string, required): Post title - `body_md` (string, optional): Post body (Markdown format) - `tags` (array of string, optional): List of tags for the post - `category` (string, optional): Post category - `wip` (boolean, optional, default: true): Whether to mark as WIP (Work In Progress) - `message` (string, optional): Change message - `user` (string, optional): Poster's screen_name (only team owners can specify) - `template_post_id` (number, optional): ID of the post to use as a template 4. `esa_update_post` - Update an existing post - Input: - `post_number` (number, required): Post number to update - `name` (string, optional): New title for the post - `body_md` (string, optional): New body for the post (Markdown format) - `tags` (array of string, optional): New list of tags for the post - `category` (string, optional): New category for the post - `wip` (boolean, optional): Whether to mark as WIP (Work In Progress) - `message` (string, optional): Change message - `created_by` (string, optional): Poster's screen_name (only team owners can specify) - `original_revision` (string, optional): Revision to base the update on ### Comment Related 1. `esa_list_comments` - Get a list of comments for a post - Input: - `post_number` (number, required): Post number to get comments for - `page` (number, optional): Page number to retrieve - `per_page` (number, optional): Number of results per page (max: 100) 2. `esa_get_comment` - Get a specific comment - Input: - `comment_id` (number, required): ID of the comment to retrieve - `include` (string, optional): Related data to include in the response (e.g. 'stargazers') 3. `esa_create_comment` - Post a comment to an article - Input: - `post_number` (number, required): Post number to comment on - `body_md` (string, required): Comment body (Markdown format) - `user` (string, optional): Poster's screen_name (only team owners can specify) ### Member Related 1. `esa_get_members` - Get a list of team members - Input: - `page` (number, optional): Page number to retrieve - `per_page` (number, optional): Number of results per page (max: 100) 2. `esa_get_member` - Get information about a specific team member - Input: - `screen_name_or_email` (string, required): Screen name or email of the member to retrieve ## Usage Example Here's an example of Claude using this MCP server to create an esa post: ``` [Claude] Please create a new post in esa. The title should be "Project X Progress Report" and the body should include "# This Week's Progress\n\n- Implementation of Feature A completed\n- Testing of Feature B started\n\n## Next Week's Plan\n\n- Start implementation of Feature C". [MCP Server] Using the esa_create_post tool to create a new post. [Result] { "number": 123, "name": "Project X Progress Report", "body_md": "# This Week's Progress\n\n- Implementation of Feature A completed\n- Testing of Feature B started\n\n## Next Week's Plan\n\n- Start implementation of Feature C", "wip": false, "created_at": "2023-06-01T12:34:56+09:00", "updated_at": "2023-06-01T12:34:56+09:00", "url": "https://your-team.esa.io/posts/123" } [Claude] The post has been created successfully. The post number is 123, and you can access it at the following URL: https://your-team.esa.io/posts/123 ``` ## Troubleshooting ### Access Token Issues ``` Error: Request failed with status code 401 ``` If you see this error, your esa access token may be invalid or expired. Generate a new access token from the esa settings screen and update your environment variable. ### Permission Issues ``` Error: Request failed with status code 403 ``` If you see this error, the current access token doesn't have the necessary permissions. Check the permissions for your access token in the esa settings screen and issue a new token if needed. ## License Provided under the MIT License.