Beehiiv MCP Server
The Beehiiv MCP Server allows interaction with the Beehiiv API v2 for managing publications and posts via standardized tools. You can:
List Publications: Retrieve all publications accessible with your API key
List Posts: View all posts for a given publication (requires
publication_id)Get Post: Retrieve details about a specific post (requires
publication_idandpost_id)Get Post Content: Fetch full HTML content for a post
Create New Post: Create new posts on the Beehiiv platform (enterprise feature only)
Used for managing environment variables, specifically the Beehiiv API key and publication ID stored in the .env file.
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@Beehiiv MCP Servershow me the 5 most recent posts from my newsletter"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Beehiiv MCP Server
A Model Context Protocol (MCP) server that provides tools for interacting with the Beehiiv API v2. This server enables Large Language Models (LLMs) to interact with Beehiiv publications and posts through standardized tools.
Prerequisites
Python 3.10 or higher
uvpackage managerA Beehiiv account with API access
Claude Desktop (or another MCP-compatible client)
Related MCP server: MCP Python Server — API Wrapper
Installation
Install
uvif you haven't already:
curl -LsSf https://astral.sh/uv/install.sh | shIf rebuilding from scratch, create and set up your project:
# 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-dotenvCreate a
.envfile in the project root:
BEEHIIV_API_KEY=your_api_key_here
BEEHIIV_PUBLICATION_ID=your_publication_id_hereClaude Desktop Configuration
Add the following to your Claude Desktop configuration file (~/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>"
]
}
}
}Replace:
<ABSOLUTE_UV_PATH>with the path to youruvexecutable<ABSOLUTE_SERVER_PATH>with the absolute path to yourbeehiiv_server.pyfile
Available Tools
This MCP server currently exposes the following tools (more will be added):
list_publications
Lists all publications accessible with your API key.
list_posts
Lists the 5 most recent confirmed posts for a given publication.
list_posts(publication_id: str)get_post
Retrieves detailed information about a specific post.
get_post(publication_id: str, post_id: str)get_post_content
Retrieves full HTML content for a post
create_new_post
Creates new post on beehiiv platform (enterprise only)
How It Works
When you interact with this server through Claude Desktop:
The client sends your question to Claude
Claude analyzes the available Beehiiv tools and decides which one(s) to use
The client executes the chosen tool(s) through this MCP server
The results are sent back to Claude
Claude formulates a natural language response
The response is displayed to you
(video coming soon)
Troubleshooting
Server Not Showing Up in Claude
Check your
claude_desktop_config.jsonfile syntaxEnsure all paths are absolute, not relative
Restart Claude Desktop
Viewing Logs
Check Claude's logs for MCP-related issues:
tail -n 20 -f ~/Library/Logs/Claude/mcp*.logLogs are stored in:
~/Library/Logs/Claude/mcp.logfor general MCP connections~/Library/Logs/Claude/mcp-server-beehiiv-mcp-server.logfor server-specific logs
Security
Never commit your
.envfile to version controlKeep your Beehiiv API key secure
Consider implementing rate limiting for API calls
Contributing
hmu on X (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.
TDQS
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
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
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
A comprehensive Model Context Protocol (MCP) server that enables AI assistants to interact with yo…
The Mercado Pago MCP Server implements the Model Context Protocol to provide AI agents and LLMs with access to Mercado Pago's APIs and tools within compatible development environments. It acts as an intermediary that translates Mercado Pago resources into executable functions (tools) that AI applications can invoke to perform actions and automate flows. The server simplifies integration, enables using documentation to implement or improve code, and optimizes operations through natural language interactions without manual implementations.
Related MCP Servers
- FlicenseNot gradedqualityFmaintenanceThis 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
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
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/reymerekar7/beehiiv-mcp-server'
If you have feedback or need assistance with the MCP directory API, please join our Discord server