Beehiiv MCP Server
Beehiiv MCP 服务器
一个模型上下文协议 (MCP) 服务器,提供与 Beehiiv API v2 交互的工具。该服务器支持大型语言模型 (LLM) 通过标准化工具与 Beehiiv 出版物和帖子进行交互。
先决条件
Python 3.10 或更高版本
uv包管理器具有 API 访问权限的 Beehiiv 帐户
Claude Desktop(或其他兼容 MCP 的客户端)
Related MCP server: MCP Python Server — API Wrapper
安装
如果尚未安装
uv,请安装:
curl -LsSf https://astral.sh/uv/install.sh | sh如果从头开始重建,请创建并设置您的项目:
# Create a new directory and navigate into it
mkdir beehiiv-mcp-server
cd beehiiv-mcp-server
# Create virtual environment and activate it
uv venv
source .venv/bin/activate
# Install dependencies
uv add "mcp[cli]" httpx python-dotenv在项目根目录中创建一个
.env文件:
BEEHIIV_API_KEY=your_api_key_here
BEEHIIV_PUBLICATION_ID=your_publication_id_hereClaude桌面配置
将以下内容添加到您的 Claude Desktop 配置文件( ~/Library/Application Support/Claude/claude_desktop_config.json ):
{
"mcpServers": {
"beehiiv-mcp-server": {
"command": "<ABSOLUTE_UV_PATH>",
"args": [
"run",
"--with",
"mcp[cli]",
"mcp",
"run",
"<ABSOLUTE_SERVER_PATH>"
]
}
}
}代替:
<ABSOLUTE_UV_PATH>为你的uv可执行文件的路径<ABSOLUTE_SERVER_PATH>为beehiiv_server.py文件的绝对路径
可用工具
该 MCP 服务器目前公开以下工具(将会添加更多工具):
列表出版物
列出可使用您的 API 密钥访问的所有出版物。
列表帖子
列出特定出版物最近确认的 5 篇帖子。
list_posts(publication_id: str)获取帖子
检索有关特定帖子的详细信息。
get_post(publication_id: str, post_id: str)获取帖子内容
检索帖子的完整 HTML 内容
创建新帖子
在 beehiiv 平台上创建新帖子(仅限企业)
工作原理
当您通过 Claude Desktop 与此服务器交互时:
客户将您的问题发送给 Claude
Claude 分析可用的 Beehiiv 工具并决定使用哪一个
客户端通过此 MCP 服务器执行所选工具
结果被发回给克劳德
克劳德制定了自然语言回应
响应将显示给您
(视频即将发布)
故障排除
Claude 中未显示服务器
检查你的
claude_desktop_config.json文件语法确保所有路径都是绝对路径,而不是相对路径
重启Claude桌面
查看日志
检查 Claude 的日志中是否存在与 MCP 相关的问题:
tail -n 20 -f ~/Library/Logs/Claude/mcp*.log日志存储在:
~/Library/Logs/Claude/mcp.log用于常规 MCP 连接~/Library/Logs/Claude/mcp-server-beehiiv-mcp-server.log用于服务器特定的日志
安全
永远不要将
.env文件提交到版本控制确保您的 Beehiiv API 密钥安全
考虑对 API 调用实施速率限制
贡献
X 上的 hmu ( https://x.com/reymerekar7 )
Available Tools
5 toolscreate_new_postC
Create a new post using provided HTML content.
Args:
publication_id: ID of the publication
title: Title of the new post
subtitle: Subtitle of the new post
html_content: HTML content for the post
| Name | Required | Description | Default |
|---|---|---|---|
| html_content | Yes | ||
| publication_id | Yes | ||
| subtitle | Yes | ||
| title | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It states it's a creation tool, implying mutation, but lacks details on permissions, side effects (e.g., whether the post is published immediately), error handling, or response format. This is a significant gap for a mutation tool without annotation coverage.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is appropriately sized and front-loaded with the main purpose in the first sentence. The parameter list is structured but could be more integrated; overall, it avoids unnecessary verbosity, though minor improvements in flow are possible.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the complexity of a mutation tool with no annotations, no output schema, and 0% schema description coverage, the description is incomplete. It lacks crucial details like behavioral traits, return values, and error conditions, making it inadequate for safe and effective agent use.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It lists all four parameters with brief explanations (e.g., 'ID of the publication'), adding basic meaning beyond the schema's titles. However, it doesn't provide deeper context like format constraints or examples, leaving some semantic gaps.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Create a new post') and specifies the resource ('using provided HTML content'), making the purpose evident. However, it doesn't explicitly differentiate from sibling tools like 'get_post' or 'list_posts', which are read operations versus this creation tool.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives. It doesn't mention prerequisites (e.g., needing a valid publication_id from 'list_publications'), exclusions, or comparisons to siblings like 'get_post' for retrieval, leaving the agent to infer usage context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_postC
Retrieve a single post by ID.
Args:
publication_id: ID of the publication
post_id: ID of the post
| Name | Required | Description | Default |
|---|---|---|---|
| post_id | Yes | ||
| publication_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden of behavioral disclosure. It states 'retrieve' (implying a read operation) but doesn't cover critical aspects like authentication needs, rate limits, error handling (e.g., what happens if IDs are invalid), or response format. For a tool with zero annotation coverage, this is a significant gap, scoring 2 for minimal transparency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is appropriately sized and front-loaded: the first sentence states the purpose clearly, followed by a structured 'Args' section. There's no wasted text, but the structure could be slightly improved by integrating the parameter explanations more seamlessly. Overall, it's efficient, earning a 4.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the complexity (a read operation with 2 required parameters), lack of annotations, and no output schema, the description is incomplete. It doesn't explain return values, error cases, or behavioral traits like idempotency. For a tool with no structured support, this leaves the agent under-informed, scoring 2 for inadequate completeness.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It lists both parameters ('publication_id' and 'post_id') with brief explanations, adding meaning beyond the schema's basic types. However, it doesn't specify format (e.g., UUID, numeric), constraints, or examples, leaving gaps. This partial compensation justifies a baseline 3.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: 'Retrieve a single post by ID.' This specifies the verb ('retrieve') and resource ('post'), and distinguishes it from siblings like 'list_posts' (which retrieves multiple posts) and 'get_post_content' (which likely retrieves content details). However, it doesn't explicitly differentiate from 'create_new_post' or 'list_publications', keeping it at 4 rather than 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives. It doesn't mention when to choose 'get_post' over 'list_posts' (e.g., for a specific post vs. browsing) or 'get_post_content' (e.g., for metadata vs. full content). Without such context, the agent lacks explicit usage instructions, scoring 2 for no guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_post_contentA
Retrieve a post's content as JSON to use as a template.
Args:
publication_id: ID of the publication
post_id: ID of the post
Returns:
dict: JSON object containing post title, subtitle, and HTML content template
| Name | Required | Description | Default |
|---|---|---|---|
| post_id | Yes | ||
| publication_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It mentions the tool retrieves content as JSON for template use, which implies a read-only operation, but doesn't disclose behavioral traits such as authentication needs, rate limits, error handling, or whether the retrieval is cached. For a tool with zero annotation coverage, this is a significant gap in transparency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is appropriately sized and front-loaded: the first sentence states the core purpose, followed by structured sections for 'Args' and 'Returns'. Every sentence earns its place by providing essential information without redundancy, making it highly efficient and well-structured.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's moderate complexity (2 parameters, no annotations, no output schema), the description is partially complete. It covers purpose, parameters, and return value, but lacks behavioral details (e.g., auth, errors) and doesn't fully explain the JSON structure beyond mentioning title, subtitle, and HTML content. Without an output schema, more detail on the return format would be beneficial for completeness.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It adds meaning by explaining that 'publication_id' and 'post_id' are IDs for the publication and post, respectively, and clarifies their purpose in retrieving content. However, it doesn't provide details on format (e.g., string patterns) or examples, leaving some ambiguity. With 0% schema coverage and 2 parameters, this is above baseline but not fully comprehensive.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the specific action ('Retrieve a post's content as JSON') and resource ('post'), distinguishing it from siblings like 'get_post' (likely metadata) and 'create_new_post' (creation). It explicitly mentions the output format ('JSON') and purpose ('to use as a template'), making the purpose highly specific and differentiated.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage by specifying the output format ('JSON') and purpose ('as a template'), suggesting it's for template creation rather than general post retrieval. However, it doesn't explicitly state when to use this tool versus alternatives like 'get_post' or 'list_posts', nor does it mention any prerequisites or exclusions, leaving some ambiguity.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_postsB
List all posts for a given publication.
Args:
publication_id: e.g. 'pub_00000000-0000-0000-0000-000000000000'
| Name | Required | Description | Default |
|---|---|---|---|
| publication_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It states it's a list operation but doesn't mention whether it's read-only, paginated, rate-limited, or what permissions are required. For a tool with zero annotation coverage, this leaves significant gaps in understanding its behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is appropriately sized and front-loaded, with the core purpose stated first followed by parameter details. Every sentence earns its place with no wasted words, making it efficient and easy to parse.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's low complexity (1 parameter, no output schema, no annotations), the description is minimally adequate. It covers the basic purpose and parameter but lacks details about output format, error handling, or behavioral traits that would make it more complete for agent use.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description adds meaningful context for the single parameter by providing an example format ('pub_00000000-0000-0000-0000-000000000000'), which is valuable since schema description coverage is 0%. However, it doesn't explain where to find this ID or what happens if an invalid ID is provided.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose with a specific verb ('List') and resource ('posts for a given publication'), making it easy to understand what it does. However, it doesn't explicitly differentiate from sibling tools like 'list_publications' or 'get_post', which would be needed for a perfect score.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives like 'list_publications' or 'get_post'. It mentions the required parameter but offers no context about appropriate use cases, prerequisites, or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_publicationsB
List all publications accessible with this API key.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It implies a read-only operation by using 'List', but fails to detail important traits such as pagination, rate limits, error handling, or the format of returned data. This leaves significant gaps in understanding how the tool behaves beyond basic functionality.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, clear sentence that directly states the tool's purpose without any unnecessary words or structural fluff. It is front-loaded and efficiently communicates the core functionality, making it easy to parse and understand quickly.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the lack of annotations and output schema, the description is incomplete for a tool that likely returns a list of publications. It does not cover the return format, potential limitations (e.g., max results), or error conditions. For a listing tool with no structured support, more context is needed to fully guide usage.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 0 parameters with 100% coverage, meaning no parameters are documented in the schema. The description does not add parameter details, which is acceptable here as there are no parameters to explain. It appropriately avoids redundancy, earning a baseline score for tools with zero parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('List') and resource ('publications'), specifying that it retrieves all publications accessible with the API key. However, it does not distinguish this tool from sibling tools like 'list_posts', which might serve a similar listing function for different resources, leaving some ambiguity about differentiation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides minimal guidance, stating it lists publications accessible with the API key, but offers no explicit advice on when to use this tool versus alternatives like 'list_posts'. There is no mention of prerequisites, exclusions, or specific contexts for usage, limiting its helpfulness for decision-making.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
5 tool updates
v1.0.0- First observed
create_new_post - First observed
get_post - First observed
get_post_content - First observed
list_posts - First observed
list_publications
TDQS
Scored across 5 tools
Most tools have distinct purposes, but get_post and get_post_content have overlapping functionality that could cause confusion. Both retrieve posts by ID, with get_post_content specifically extracting content as a template, but the distinction may not be clear to an agent without careful reading of descriptions.
All tool names follow a consistent verb_noun pattern (create_new_post, get_post, get_post_content, list_posts, list_publications). The naming is predictable and readable throughout the set, with no deviations in style.
With 5 tools, the count is reasonable for a Beehiiv MCP server focused on post and publication management. It covers core operations but feels slightly thin, as it lacks update or delete functionality for posts, which are common in such domains.
The toolset covers creation, retrieval, and listing for posts and publications, but has notable gaps. There are no tools for updating or deleting posts, which are essential for a full CRUD lifecycle, and no publication-specific management beyond listing, which could lead to agent workarounds.
Maintenance
Related MCP Connectors
Model Context Protocol server for the Apideck Unified API. Connect any MCP-compatible agent framework to 100+ accounting systems, HRIS platforms, file storage providers, and more through one integration. More information https://www.apideck.com/mcp-server
A Model Context Protocol server for Wix AI tools
The official Model Context Protocol server for Ambee. It gives any MCP-compatible AI assistant — Claude, ChatGPT, Cursor, VS Code, Ollama, and more direct access to live air quality, pollen, and weather data. To get started, including information on signing up and obtaining your Ambee key, check out the Ambee documentation on https://docs.ambeedata.com
A comprehensive Model Context Protocol (MCP) server that enables AI assistants to interact with yo…
Related MCP Servers
- FlicenseNot gradedqualityDmaintenanceThis server implements the Model Context Protocol to facilitate meaningful interaction and understanding development between humans and AI through structured tools and progressive interaction patterns.57-
- FlicenseNot gradedqualityDmaintenanceA Python server implementing the Model Context Protocol that exposes tools for querying external APIs, compatible with Claude Desktop and ChatGPT Desktop.-
- AlicenseNot gradedqualityDmaintenanceA Model Context Protocol server that enables AI assistants to programmatically interact with the Hashnode API for creating, updating, searching, and retrieving blog content.7MIT
- AlicenseAqualityDmaintenanceA Model Context Protocol server providing tools for DB queries, API calls, file I/O, and text transformations, enabling AI agents like Claude to perform real-world actions.10MIT