Beehiiv Analytics MCP Server
This server provides read-only access to Beehiiv publication analytics and content data through the Model Context Protocol.
Publications - List all accessible publications and get detailed information about specific publications by ID
Posts - Retrieve posts for a publication with customizable limits (default: 10), access detailed post information by post ID, and view post statistics
Subscribers - List subscribers for a publication with customizable limits (default: 10) and get detailed information about specific subscribers by ID
Segments - List all audience segments for a publication and access detailed segment information by segment ID
All operations require appropriate publication IDs and some require additional identifiers. The server integrates with MCP-compatible clients like Claude Desktop and Cursor IDE.
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 Analytics MCP Servershow me the top performing posts from last month"
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 for Beehiiv analytics, providing read access to publications, posts, and segments data, plus a guarded tool for unsubscribing subscribers.
Features
Publications
List all publications
Get detailed publication information
Posts
List posts with filtering options (status, audience, platform, etc.)
Get detailed post information with optional content expansion
Get aggregate statistics for all posts in a publication
Segments
List all segments for a publication
Get detailed segment information
Subscribers
Unsubscribe one or more subscribers by email (dry-run by default, reversible)
Related MCP server: substack-publisher-mcp
Prerequisites
Python 3.8 or higher
A Beehiiv API key (Get one here)
An MCP-compatible client (e.g., Claude Desktop, Cursor)
Installation
1. Clone or Download this Repository
git clone https://github.com/ousepachn/beehiivanalyticsMCP.git
cd beehiivanalyticsMCPOr download and extract the ZIP file from GitHub.
2. Create a Virtual Environment (Recommended)
python3 -m venv venv
source venv/bin/activate # On Windows: venv\Scripts\activate3. Install Dependencies
pip install -r requirements.txt4. Set Up Your API Key
Create a .env file in the project root:
cp .env.example .envThen edit .env and add your Beehiiv API key:
BEEHIIV_API_KEY=your_api_key_hereImportant: Never commit your .env file to version control. It's already included in .gitignore.
Configuration
For Claude Desktop
Locate your Claude Desktop configuration file:
macOS:
~/Library/Application Support/Claude/claude_desktop_config.jsonWindows:
%APPDATA%\Claude\claude_desktop_config.json
Add the following configuration (adjust paths as needed):
{
"mcpServers": {
"beehiiv-analytics": {
"command": "/absolute/path/to/venv/bin/python3",
"args": ["/absolute/path/to/beehiiv_mcp_server.py"],
"env": {
"BEEHIIV_API_KEY": "your_api_key_here"
}
}
}
}Example for macOS:
{
"mcpServers": {
"beehiiv-analytics": {
"command": "/Users/yourusername/beehiivMCP/venv/bin/python3",
"args": ["/Users/yourusername/beehiivMCP/beehiiv_mcp_server.py"],
"env": {
"BEEHIIV_API_KEY": "your_api_key_here"
}
}
}
}Restart Claude Desktop
For Cursor IDE
Open Cursor settings
Navigate to MCP settings
Add the server configuration similar to Claude Desktop above
Alternative: Using mcp_config.json
You can also use the included mcp_config.json.example file:
Copy the example file:
cp mcp_config.json.example mcp_config.jsonEdit
mcp_config.jsonand update the paths and API key
Note: The mcp_config.json file is gitignored by default to protect your API key.
Testing
Test API Connectivity
Run the test script to verify your API key works:
python test_beehiiv_api.pyTest the MCP Server
Run the example usage script:
python example_usage.pyRun All Tests
python test_all.pyAvailable Tools
The server provides the following MCP tools:
list_publications- List all publications accessible with your API keyget_publication_details- Get detailed information about a specific publicationlist_posts- List posts with various filters (status, audience, platform, date sorting)get_post_details- Get detailed post information with optional content expansionget_posts_summary_stats- Get aggregate statistics for all posts in a publicationlist_segments- List all segments for a publicationget_segment_details- Get detailed information about a specific segmentunsubscribe_subscribers- Unsubscribe (mark inactive) one or more subscribers by email. Defaults to a dry run that reports what would change; passapply: trueto actually make the change. Already-inactive or not-found emails are skipped, so it's safe to re-run.
Usage Examples
Using with Claude Desktop
Once configured, you can ask Claude:
"List all my publications"
"Show me the 10 most recent posts from publication X"
"What are the stats for my latest post?"
"List all segments for publication Y"
"Show me what would happen if I unsubscribed jane@example.com and john@example.com from publication X" (dry run)
"Unsubscribe jane@example.com from publication X" (pass
apply: trueto actually make the change)
Programmatic Usage
See example_usage.py for a complete example of using the API client directly.
Troubleshooting
API Key Issues
Make sure your API key is set correctly in the environment variable or config file
Verify your API key is valid at the Beehiiv Developer Portal
Check that your API key has the necessary permissions
Path Issues
Use absolute paths in your MCP configuration
Ensure the Python path points to your virtual environment's Python
Verify the server script path is correct
Connection Issues
Check your internet connection
Verify the Beehiiv API is accessible
Check firewall settings if applicable
API Documentation
For detailed API information, refer to the official Beehiiv API documentation:
Contributing
Contributions are welcome! Please feel free to submit a Pull Request.
License
This project is licensed under the MIT License - see the LICENSE file for details.
Support
If you encounter any issues or have questions:
Check the Troubleshooting section
Review the Beehiiv API Documentation
Open an issue on GitHub
Acknowledgments
Built for the Model Context Protocol
Uses the Beehiiv API
Available Tools
8 toolsget_post_detailsB
Get detailed information about a specific post
| Name | Required | Description | Default |
|---|---|---|---|
| publication_id | Yes | The ID of the publication | |
| post_id | Yes | The ID of the post |
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 this is a read operation ('Get'), implying it's likely safe and non-destructive, but doesn't confirm this or address other traits like authentication needs, rate limits, error conditions, or response format. 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 a single, efficient sentence that front-loads the core purpose without unnecessary words. Every part of the sentence ('Get detailed information about a specific post') directly contributes to understanding the tool's function, making it appropriately sized 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 low complexity (2 required parameters, no output schema, no annotations), the description is minimally adequate. It covers the basic purpose but lacks behavioral details, usage guidelines, and output information. Without annotations or an output schema, the agent must rely on the description alone, which is incomplete for safe and effective 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 schema description coverage is 100%, with clear descriptions for both parameters ('publication_id' and 'post_id'), so the schema does the heavy lifting. The description adds no additional parameter semantics beyond implying these IDs are required to fetch post details, which is already evident from the schema. This meets the baseline for high schema coverage.
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 verb ('Get') and resource ('detailed information about a specific post'), making the purpose immediately understandable. It distinguishes this tool from siblings like 'get_posts' (which likely lists multiple posts) and 'get_publication_details' (which focuses on publications rather than posts). However, it doesn't specify what 'detailed information' includes, which prevents 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. It doesn't mention prerequisites (e.g., needing a publication ID and post ID), exclusions, or comparisons to siblings like 'get_posts' for listing posts or 'get_publication_details' for publication-level data. This lack of context leaves the agent to infer usage scenarios independently.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_postsC
Get posts for a publication
| Name | Required | Description | Default |
|---|---|---|---|
| publication_id | Yes | The ID of the publication | |
| limit | No | Number of posts to return (default: 10) |
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 the tool 'gets' posts, implying a read operation, but does not specify whether it lists all posts, filters them, requires authentication, has rate limits, or describes the return format. 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 a single, efficient sentence: 'Get posts for a publication'. It is front-loaded with the core action and resource, with zero wasted words. Every part of the sentence earns its place by conveying essential information without redundancy.
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 complexity (a read operation with parameters), lack of annotations, and no output schema, the description is incomplete. It does not explain what 'posts' entail, how they are returned, or any behavioral traits like pagination or error handling. For a tool with these contextual gaps, the description should provide more completeness to aid the agent.
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 100% description coverage, clearly documenting both parameters: 'publication_id' and 'limit' with default. The description adds no additional meaning beyond the schema, such as explaining what constitutes a 'publication' or how posts are ordered. With high schema coverage, the baseline score of 3 is appropriate as the schema handles the heavy lifting.
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 'Get posts for a publication' clearly states the action (get) and resource (posts), and specifies the scope (for a publication). However, it does not distinguish this tool from its sibling 'get_post_details', which might retrieve specific post information rather than a list. The purpose is clear but lacks sibling 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 no guidance on when to use this tool versus alternatives like 'get_post_details' or 'get_publications'. It implies usage for retrieving posts associated with a publication, but offers no explicit context, exclusions, or prerequisites. This leaves the agent to infer usage without clear direction.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_publication_detailsC
Get detailed information about a specific publication
| Name | Required | Description | Default |
|---|---|---|---|
| publication_id | Yes | The ID of the publication |
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 'gets' information, implying a read-only operation, but doesn't clarify aspects like authentication needs, rate limits, error handling, or what 'detailed information' entails beyond the single parameter. This leaves significant gaps for a tool with no structured safety hints.
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, efficient sentence with zero waste. It front-loads the core purpose ('Get detailed information') and specifies the resource ('about a specific publication'), making it easy to parse and appropriately sized for its simplicity.
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. It doesn't explain what 'detailed information' includes in the return values, nor does it address behavioral aspects like permissions or errors. For a tool with no structured context, this leaves the agent under-informed about how to use it effectively.
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 schema description coverage is 100%, with the parameter 'publication_id' fully documented in the schema. The description adds no additional meaning beyond implying it fetches details for a 'specific' publication, which is already clear from the schema. This meets the baseline for high schema coverage.
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 verb 'Get' and resource 'detailed information about a specific publication,' making the purpose evident. However, it doesn't explicitly differentiate from sibling tools like 'get_publications' (which likely lists multiple publications) or 'get_post_details' (which might handle different resource types), so it falls short of 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. It doesn't mention siblings like 'get_publications' for listing publications or 'get_post_details' for other resource types, nor does it specify prerequisites or exclusions, 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_publicationsC
Get list of publications
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
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. 'Get list' suggests a read-only operation, but it doesn't disclose behavioral traits like pagination, sorting, filtering, rate limits, authentication needs, or what happens if no publications exist. 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 extremely concise with just three words, front-loading the core purpose without any waste. It's appropriately sized for a simple tool with no parameters, though this conciseness comes at the cost of detail in other dimensions.
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, no output schema, and multiple sibling tools, the description is incomplete. It doesn't explain what the tool returns (e.g., format, fields), how it differs from similar tools, or any behavioral context. For a tool in a server with many related tools, more guidance is needed to ensure correct 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, so no parameter documentation is needed. The description doesn't add parameter information, which is appropriate here. Baseline is 4 for zero parameters, as the schema fully covers the absence of inputs.
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 'Get list of publications' clearly states the action (get) and resource (publications), but it's vague about scope and doesn't differentiate from sibling tools like 'get_publication_details' or 'get_posts'. It provides basic purpose but lacks specificity about what kind of list or what publications are being retrieved.
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?
No guidance is provided about when to use this tool versus alternatives like 'get_publication_details' (for specific publications) or 'get_posts' (which might overlap). The description implies a list operation but doesn't specify context, prerequisites, or exclusions, leaving the agent to guess based on tool names alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_segment_detailsC
Get detailed information about a specific segment
| Name | Required | Description | Default |
|---|---|---|---|
| publication_id | Yes | The ID of the publication | |
| segment_id | Yes | The ID of the segment |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden for behavioral disclosure. It states this is a read operation ('Get'), but doesn't mention authentication requirements, rate limits, error conditions, response format, or whether it returns nested data. For a tool with two required parameters and no output schema, this leaves significant behavioral gaps.
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, efficient sentence with zero wasted words. It's appropriately sized for a simple retrieval tool and front-loads the core purpose immediately. Every word earns its place in conveying the essential function.
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?
For a retrieval tool with two required parameters, no annotations, and no output schema, the description is insufficiently complete. It doesn't explain what 'detailed information' includes, how the segment relates to the publication, what format the response takes, or potential error scenarios. The agent would need to guess about the tool's behavior and output structure.
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 100%, with both parameters clearly documented in the schema. The description adds no additional parameter context beyond implying these IDs are needed to fetch segment details. This meets the baseline of 3 when the schema does the heavy lifting, though the description doesn't enhance understanding of what constitutes valid IDs or their relationships.
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 verb 'Get' and resource 'detailed information about a specific segment', which is specific and unambiguous. However, it doesn't explicitly differentiate from sibling tools like 'get_segments' (which likely lists segments) or 'get_publication_details' (which focuses on publications rather than segments).
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 'get_segments' (for listing segments) or 'get_post_details' (for post-level details). It doesn't mention prerequisites, exclusions, or contextual factors that would help an agent choose between these similar retrieval tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_segmentsC
Get segments for a publication
| Name | Required | Description | Default |
|---|---|---|---|
| publication_id | Yes | The ID of the publication |
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 only states the basic action ('Get segments') without revealing if this is a read-only operation, how results are returned (e.g., pagination, format), error conditions, or rate limits. For a tool with no annotation coverage, this leaves critical behavioral traits unspecified, though it doesn't contradict any annotations.
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 extremely concise with a single, direct sentence that front-loads the core purpose. There is no wasted language or redundancy, making it efficient for quick understanding. However, this conciseness comes at the cost of completeness, as noted in other dimensions.
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 effective tool use. It doesn't explain what 'segments' are in this context, the return format (e.g., list of objects with IDs/names), or behavioral aspects like data freshness or access permissions. For a tool with no structured metadata, the description should provide more context to compensate, but it does not.
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 100% description coverage, with the single parameter 'publication_id' clearly documented. The description adds no additional parameter semantics beyond implying the tool fetches segments associated with a publication, which is already inferred from the schema. This meets the baseline score of 3, as the schema adequately covers parameter details without extra value from the description.
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 ('Get') and target resource ('segments for a publication'), making the purpose understandable. It distinguishes from siblings like 'get_segment_details' (which likely retrieves details of a single segment) by implying retrieval of multiple segments. However, it doesn't specify if this returns all segments or filtered ones, leaving some ambiguity compared to siblings.
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), differentiate from 'get_segment_details' (for single segment details) or 'get_publication_details' (which might include segments), or specify use cases like listing segments for analysis. Without this context, the agent must infer usage from tool names alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_subscriber_detailsC
Get detailed information about a specific subscriber
| Name | Required | Description | Default |
|---|---|---|---|
| publication_id | Yes | The ID of the publication | |
| subscriber_id | Yes | The ID of the subscriber |
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 this is a 'Get' operation, implying it's likely read-only, but doesn't confirm this or describe other traits like authentication needs, rate limits, error handling, or what 'detailed information' entails. 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 a single, efficient sentence that front-loads the core purpose without unnecessary words. Every part of the sentence ('Get detailed information about a specific subscriber') directly contributes to understanding the tool's function, making it optimally concise 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 lack of annotations and output schema, the description is incomplete for a tool that retrieves detailed information. It doesn't explain what 'detailed information' includes, how results are formatted, or any behavioral aspects like permissions or errors. For a tool with 2 required parameters and no structured output documentation, the description should provide more context to be fully helpful.
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 schema description coverage is 100%, with both parameters ('publication_id' and 'subscriber_id') clearly documented in the schema. The description doesn't add any meaningful parameter semantics beyond what the schema already provides, such as format examples or contextual usage. This meets the baseline score when schema coverage is high.
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 ('Get') and resource ('detailed information about a specific subscriber'), making it immediately understandable. However, it doesn't explicitly differentiate this tool from sibling tools like 'get_subscribers' (which likely lists multiple subscribers) or 'get_publication_details' (which focuses on publications rather than subscribers), missing the opportunity for full sibling 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 no guidance on when to use this tool versus alternatives. It doesn't mention when to choose 'get_subscriber_details' over 'get_subscribers' (for bulk vs. single subscriber queries) or other sibling tools, nor does it specify prerequisites or exclusions. This leaves the agent without contextual usage instructions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_subscribersC
Get subscribers for a publication
| Name | Required | Description | Default |
|---|---|---|---|
| publication_id | Yes | The ID of the publication | |
| limit | No | Number of subscribers to return (default: 10) |
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 'Get subscribers' but doesn't clarify if this is a read-only operation, whether it requires authentication, if there are rate limits, what the return format is (e.g., list, paginated), or if it's destructive. For a tool with no 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 a single, efficient sentence with zero wasted words. It's front-loaded with the core purpose and appropriately sized for the tool's complexity. Every part of the sentence earns its place by specifying the action and target.
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 has no annotations, no output schema, and the description lacks behavioral details, it's incomplete for effective use. The agent knows what to do (get subscribers) but not how it behaves, what it returns, or when to use it versus siblings. For a tool with 2 parameters and no structured support, the description should provide more context to compensate.
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 100% description coverage, with clear documentation for publication_id and limit (including a default). The description adds no additional parameter semantics beyond what the schema provides, such as format examples or constraints. According to the rules, with high schema coverage (>80%), the baseline is 3 even without param info in the description.
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 'Get subscribers for a publication' clearly states the action (get) and resource (subscribers), with the context (for a publication) that distinguishes it from sibling tools like get_subscriber_details or get_segments. However, it doesn't specify the scope (e.g., all subscribers vs. filtered) or differentiate from potential similar tools like get_subscribers_by_segment, 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. It doesn't mention sibling tools like get_subscriber_details (for individual subscriber data) or get_segments (for subscriber groups), nor does it specify prerequisites or exclusions. The agent must infer usage from context alone.
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. Dates show when Glama detected each change.
6 tool updates
v1.0.0- Added
get_post_details - Added
get_posts - Added
get_segment_details - Added
get_segments - Added
get_subscriber_details - Added
get_subscribers
2 tool updates
- First observed
get_publication_details - First observed
get_publications
TDQS
Every tool has a clearly distinct purpose targeting different resources (posts, publications, segments, subscribers) with consistent get_<resource> and get_<resource>_details patterns. There is no ambiguity between tools as each serves a unique data retrieval function.
All tools follow a perfectly consistent verb_noun pattern with 'get_' prefix and snake_case naming. The naming convention is predictable throughout the set, making it easy to understand each tool's function at a glance.
With 8 tools, this server is well-scoped for analytics purposes. Each tool earns its place by covering different data retrieval aspects of the Beehiiv platform, providing comprehensive read access without being overwhelming.
The toolset provides excellent read coverage with consistent get operations for all major resources, but lacks any write, update, or delete capabilities. For an analytics server, this may be intentional, but it creates a read-only surface that limits agent workflows to data retrieval only.
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
Read-only SaaS business intelligence from GA4, Stripe, and Google Search Console.
Read-only access to your Nexly web analytics: traffic, pages, acquisition, events, and reports.
Read-only access to your what2post LinkedIn data: posts, profile stats, follower growth and goals.
- AgentioOAuthcom.agentio
Ask about your Agentio campaigns, Creator deals, and performance on YouTube and Meta. Read-only.
Related MCP Servers
- FlicenseCqualityDmaintenanceProvides access to Northbeam marketing analytics data, enabling querying of metrics, dimensions, channel performance, cohort analysis, and attribution data.61-
- AlicenseAqualityAmaintenanceMCP server for Substack's official Publisher API that enables querying post analytics, subscriber counts, and publication data through natural language from MCP clients.66MIT
- AlicenseNot gradedqualityFmaintenanceProvides deep, structured access to Substack publications with real-time content analysis, including sentiment analysis, readability metrics, and publishing patterns.13MIT
- AlicenseNot gradedqualityCmaintenanceExposes Umami analytics (Cloud or self-hosted) as read-only tools for querying website stats, pageviews, metrics, and active visitors.16MIT
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/ousepachn/beehiivanalyticsMCP'
If you have feedback or need assistance with the MCP directory API, please join our Discord server