Skip to main content
Glama

create_new_post

Publish a new blog post on Beehiiv by providing a publication ID, title, subtitle, and HTML content. Simplifies content creation through structured inputs.

Instructions

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

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
html_contentYes
publication_idYes
subtitleYes
titleYes

Implementation Reference

  • The core handler function for the 'create_new_post' MCP tool. It is registered via @mcp.tool() decorator and implements the logic to create a new post in Beehiiv by posting title, subtitle, and HTML content to the API endpoint.
    @mcp.tool()
    # have not tested this as I am not an enterprise customer, but leaving here for reference
    async def create_new_post(publication_id: str, title: str, subtitle: str, html_content: str) -> str:
        """
        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
        """
        path = f"/publications/{publication_id}/posts"
        
        post_data = {
            "title": title,
            "subtitle": subtitle,
            "content": {
                "free": {
                    "web": html_content,
                    "email": html_content,  # You might want to format this differently for email
                    "rss": html_content    # And for RSS
                }
            }
        }
        
        response = await beehiiv_request("POST", path, json_body=post_data)
        
        if not response or "data" not in response:
            return f"Failed to create post: {response.get('error', 'Unknown error')}"
        
        new_post = response["data"]
        return {
            "status": "success",
            "post_id": new_post.get("id"),
            "web_url": new_post.get("web_url")
        }
  • Supporting helper function 'beehiiv_request' used by the create_new_post handler to make authenticated API calls to Beehiiv.
    async def beehiiv_request(
        method: str,
        path: str,
        params: Optional[dict[str, Any]] = None,
        json_body: Optional[dict[str, Any]] = None
    ) -> Optional[dict[str, Any]]:
        """
        Helper to call the beehiiv API v2.
    
        Args:
            method: HTTP method (GET, POST, etc.)
            path:   API path (e.g. '/publications')
            params: Query parameters
            json_body: Request JSON body
        """
        headers = {
            "Authorization": f"Bearer {BEEHIIV_API_KEY}",
            "Content-Type": "application/json"
        }
        url = f"{BASE_URL}{path}"
        async with httpx.AsyncClient() as client:
            try:
                response = await client.request(
                    method, url,
                    headers=headers,
                    params=params,
                    json=json_body,
                    timeout=30.0
                )
                response.raise_for_status()
                return response.json()
            except httpx.HTTPError as e:
                return {"error": str(e)}
  • The @mcp.tool() decorator registers the create_new_post function as an MCP tool.
    @mcp.tool()
Install Server

Other Tools

Related Tools

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/reymerekar7/beehiiv-mcp-server'

If you have feedback or need assistance with the MCP directory API, please join our Discord server