# Bear Blog MCP Server
[](https://pypi.org/project/bearblog-mcp-server/)
[](https://www.python.org/downloads/)
[](https://opensource.org/licenses/MIT)
A Model Context Protocol (MCP) server for interacting with [Bear Blog](https://bearblog.dev) programmatically. This allows AI assistants like Claude to manage your Bear Blog posts directly.
## Features
### Post Management
- **List Posts**: Get all your blog posts with metadata
- **Read Posts**: Retrieve full post content including title, slug, and markdown body
- **Create Posts**: Write new blog posts (as drafts or published)
- **Update Posts**: Edit existing posts
- **Delete Posts**: Permanently remove posts
- **Publish/Unpublish**: Toggle post publication status
### Page Management
- **List Pages**: Get all your static pages with metadata
- **Read Pages**: Retrieve full page content
- **Create Pages**: Create new pages (About, Contact, etc.)
- **Update Pages**: Edit existing pages
- **Delete Pages**: Permanently remove pages
- **Publish/Unpublish Pages**: Toggle page publication status
### Blog Settings
- **Get Settings**: Retrieve all blog configuration
- **Update Settings**: Modify blog subdomain, language, analytics, and advanced options
### Home Page Content
- **Get Home Page**: Retrieve blog title, favicon, meta description, meta image, and landing page content
- **Update Home Page**: Customize blog title, favicon, meta description, meta image, and home page markdown
### Navigation Management
- **Get Navigation**: Retrieve navigation menu links in markdown format
- **Update Navigation**: Customize navigation menu with markdown-formatted links
### Theme and Style Management
- **List Themes**: Get all available pre-built themes (30+ community themes)
- **Get Styles**: Retrieve current custom CSS
- **Update Styles**: Modify custom CSS to customize appearance
- **Apply Theme**: Apply a pre-built theme (WARNING: overwrites custom CSS)
## Installation
### Quick Start (Recommended)
Install and run with `uvx` (zero-install, runs immediately):
```bash
uvx --from bearblog-mcp-server bearblog-mcp
```
Or install persistently with `pipx`:
```bash
pipx install bearblog-mcp-server
# Then run with:
bearblog-mcp
```
### For Development
Clone the repository and install in editable mode:
```bash
git clone https://github.com/rmunoz33/bearblog-mcp.git
cd bearblog-mcp
uv pip install -e .
```
## Configuration
### Environment Variables
The MCP server requires Bear Blog credentials to be provided as environment variables:
- `BEAR_BLOG_EMAIL` - Your Bear Blog account email
- `BEAR_BLOG_PASSWORD` - Your Bear Blog account password
- `BEAR_BLOG_SUBDOMAIN` - Your blog's subdomain (e.g., "myblog" for myblog.bearblog.dev)
- `BEAR_BLOG_BASE_URL` - Base URL (default: https://bearblog.dev)
**Note**: For passwords with special characters, use single quotes in `.env` files.
**Note**: Use double quotes around the password. If your password contains a dollar sign (`$`), it will be treated as a literal character (python-dotenv does not expand bare `$` variables).
## Usage
### With Claude Code
Add to your Claude Code MCP settings (`~/.claude.json`):
```json
{
  "mcpServers": {
    "bearblog": {
      "type": "stdio",
      "command": "uvx",
      "args": ["--from", "bearblog-mcp-server", "bearblog-mcp"],
      "env": {
        "BEAR_BLOG_EMAIL": "your_email@example.com",
        "BEAR_BLOG_PASSWORD": "your_password",
        "BEAR_BLOG_SUBDOMAIN": "your_subdomain"
      }
    }
  }
}
```
**Alternative with `pipx` (if installed persistently):**
```json
{
  "mcpServers": {
    "bearblog": {
      "type": "stdio",
      "command": "bearblog-mcp",
      "env": {
        "BEAR_BLOG_EMAIL": "your_email@example.com",
        "BEAR_BLOG_PASSWORD": "your_password",
        "BEAR_BLOG_SUBDOMAIN": "your_subdomain"
      }
    }
  }
}
```
After editing the config, restart Claude Code and verify with the `/mcp` command.
### Standalone
Run the server directly:
```bash
# With uvx (zero-install)
BEAR_BLOG_EMAIL=your@email.com BEAR_BLOG_PASSWORD=pass BEAR_BLOG_SUBDOMAIN=blog \
  uvx --from bearblog-mcp-server bearblog-mcp
# Or if installed with pipx
BEAR_BLOG_EMAIL=your@email.com BEAR_BLOG_PASSWORD=pass BEAR_BLOG_SUBDOMAIN=blog \
  bearblog-mcp
```
## Available Tools
### Post Tools
- `bear_list_posts` - List all blog posts
- `bear_get_post` - Get a specific post by ID
- `bear_create_post` - Create a new post
- `bear_update_post` - Update an existing post
- `bear_delete_post` - Delete a post permanently
- `bear_publish_post` - Toggle publish status
### Page Tools
- `bear_list_pages` - List all pages
- `bear_get_page` - Get a specific page by ID
- `bear_create_page` - Create a new page
- `bear_update_page` - Update an existing page
- `bear_delete_page` - Delete a page permanently
- `bear_publish_page` - Toggle page publish status
### Settings Tools
- `bear_get_blog_settings` - Get current blog configuration
- `bear_update_blog_settings` - Update blog settings
### Home Page Tools
- `bear_get_home_page` - Get blog title, favicon, meta description, meta image, and content
- `bear_update_home_page` - Update blog title, favicon, meta description, meta image, and content
### Navigation Tools
- `bear_get_navigation` - Get navigation menu links
- `bear_update_navigation` - Update navigation menu with markdown links
### Theme and Style Tools
- `bear_list_themes` - List all available pre-built themes
- `bear_get_styles` - Get current custom CSS
- `bear_update_styles` - Update custom CSS
- `bear_apply_theme` - Apply a pre-built theme (WARNING: overwrites custom CSS)
### Resources
- `bear://posts` - Formatted list of all posts
- `bear://post/{id}` - Individual post content
- `bear://pages` - Formatted list of all pages
- `bear://page/{id}` - Individual page content
## Premium Features
This MCP server was developed and tested using a **free Bear Blog account**. Some Bear Blog features require a [Bear Blog Pro subscription](https://bearblog.dev/dashboard/upgrade/) ($5/month or $49/year) and are not currently implemented:
- **Email List Management**: Subscriber capture and newsletter functionality
- **Media Upload**: Direct file and image uploading via MCP tools
- **Custom Domains**: Domain configuration tools
- **Advanced Analytics**: Detailed traffic and engagement metrics
If you have a Bear Blog Pro account and would like these features added, please [open an issue on GitHub](https://github.com/rmunoz33/bearblog-mcp/issues) or reach out to discuss implementation.
## Testing
Run the test scripts to verify functionality:
```bash
# Test post management
uv run python tests/test_tools.py
# Test page management
uv run python tests/test_pages.py
```
## Development
See `research/` directory for API exploration scripts and `API_FINDINGS.md` for endpoint documentation.
## License
MIT
## Credits
Built with [FastMCP](https://github.com/jlowin/fastmcp) - The fast, Pythonic way to build MCP servers.
            
         
        Raw data
        
            {
    "_id": null,
    "home_page": null,
    "name": "bearblog-mcp-server",
    "maintainer": null,
    "docs_url": null,
    "requires_python": ">=3.10",
    "maintainer_email": null,
    "keywords": "mcp, bearblog, blog, model-context-protocol, claude, ai",
    "author": null,
    "author_email": "Rocky Munoz <almostheresy@gmail.com>",
    "download_url": "https://files.pythonhosted.org/packages/4d/e7/1b34a7ec129e22aa371d9d5c9ba4c2c1ae75a7eabb49d6acb713e341a87e/bearblog_mcp_server-0.1.1.tar.gz",
    "platform": null,
    "description": "# Bear Blog MCP Server\n\n[](https://pypi.org/project/bearblog-mcp-server/)\n[](https://www.python.org/downloads/)\n[](https://opensource.org/licenses/MIT)\n\nA Model Context Protocol (MCP) server for interacting with [Bear Blog](https://bearblog.dev) programmatically. This allows AI assistants like Claude to manage your Bear Blog posts directly.\n\n## Features\n\n### Post Management\n- **List Posts**: Get all your blog posts with metadata\n- **Read Posts**: Retrieve full post content including title, slug, and markdown body\n- **Create Posts**: Write new blog posts (as drafts or published)\n- **Update Posts**: Edit existing posts\n- **Delete Posts**: Permanently remove posts\n- **Publish/Unpublish**: Toggle post publication status\n\n### Page Management\n- **List Pages**: Get all your static pages with metadata\n- **Read Pages**: Retrieve full page content\n- **Create Pages**: Create new pages (About, Contact, etc.)\n- **Update Pages**: Edit existing pages\n- **Delete Pages**: Permanently remove pages\n- **Publish/Unpublish Pages**: Toggle page publication status\n\n### Blog Settings\n- **Get Settings**: Retrieve all blog configuration\n- **Update Settings**: Modify blog subdomain, language, analytics, and advanced options\n\n### Home Page Content\n- **Get Home Page**: Retrieve blog title, favicon, meta description, meta image, and landing page content\n- **Update Home Page**: Customize blog title, favicon, meta description, meta image, and home page markdown\n\n### Navigation Management\n- **Get Navigation**: Retrieve navigation menu links in markdown format\n- **Update Navigation**: Customize navigation menu with markdown-formatted links\n\n### Theme and Style Management\n- **List Themes**: Get all available pre-built themes (30+ community themes)\n- **Get Styles**: Retrieve current custom CSS\n- **Update Styles**: Modify custom CSS to customize appearance\n- **Apply Theme**: Apply a pre-built theme (WARNING: overwrites custom CSS)\n\n## Installation\n\n### Quick Start (Recommended)\n\nInstall and run with `uvx` (zero-install, runs immediately):\n\n```bash\nuvx --from bearblog-mcp-server bearblog-mcp\n```\n\nOr install persistently with `pipx`:\n\n```bash\npipx install bearblog-mcp-server\n# Then run with:\nbearblog-mcp\n```\n\n### For Development\n\nClone the repository and install in editable mode:\n\n```bash\ngit clone https://github.com/rmunoz33/bearblog-mcp.git\ncd bearblog-mcp\nuv pip install -e .\n```\n\n## Configuration\n\n### Environment Variables\n\nThe MCP server requires Bear Blog credentials to be provided as environment variables:\n\n- `BEAR_BLOG_EMAIL` - Your Bear Blog account email\n- `BEAR_BLOG_PASSWORD` - Your Bear Blog account password\n- `BEAR_BLOG_SUBDOMAIN` - Your blog's subdomain (e.g., \"myblog\" for myblog.bearblog.dev)\n- `BEAR_BLOG_BASE_URL` - Base URL (default: https://bearblog.dev)\n\n**Note**: For passwords with special characters, use single quotes in `.env` files.\n\n**Note**: Use double quotes around the password. If your password contains a dollar sign (`$`), it will be treated as a literal character (python-dotenv does not expand bare `$` variables).\n\n## Usage\n\n### With Claude Code\n\nAdd to your Claude Code MCP settings (`~/.claude.json`):\n\n```json\n{\n  \"mcpServers\": {\n    \"bearblog\": {\n      \"type\": \"stdio\",\n      \"command\": \"uvx\",\n      \"args\": [\"--from\", \"bearblog-mcp-server\", \"bearblog-mcp\"],\n      \"env\": {\n        \"BEAR_BLOG_EMAIL\": \"your_email@example.com\",\n        \"BEAR_BLOG_PASSWORD\": \"your_password\",\n        \"BEAR_BLOG_SUBDOMAIN\": \"your_subdomain\"\n      }\n    }\n  }\n}\n```\n\n**Alternative with `pipx` (if installed persistently):**\n\n```json\n{\n  \"mcpServers\": {\n    \"bearblog\": {\n      \"type\": \"stdio\",\n      \"command\": \"bearblog-mcp\",\n      \"env\": {\n        \"BEAR_BLOG_EMAIL\": \"your_email@example.com\",\n        \"BEAR_BLOG_PASSWORD\": \"your_password\",\n        \"BEAR_BLOG_SUBDOMAIN\": \"your_subdomain\"\n      }\n    }\n  }\n}\n```\n\nAfter editing the config, restart Claude Code and verify with the `/mcp` command.\n\n### Standalone\n\nRun the server directly:\n\n```bash\n# With uvx (zero-install)\nBEAR_BLOG_EMAIL=your@email.com BEAR_BLOG_PASSWORD=pass BEAR_BLOG_SUBDOMAIN=blog \\\n  uvx --from bearblog-mcp-server bearblog-mcp\n\n# Or if installed with pipx\nBEAR_BLOG_EMAIL=your@email.com BEAR_BLOG_PASSWORD=pass BEAR_BLOG_SUBDOMAIN=blog \\\n  bearblog-mcp\n```\n\n## Available Tools\n\n### Post Tools\n- `bear_list_posts` - List all blog posts\n- `bear_get_post` - Get a specific post by ID\n- `bear_create_post` - Create a new post\n- `bear_update_post` - Update an existing post\n- `bear_delete_post` - Delete a post permanently\n- `bear_publish_post` - Toggle publish status\n\n### Page Tools\n- `bear_list_pages` - List all pages\n- `bear_get_page` - Get a specific page by ID\n- `bear_create_page` - Create a new page\n- `bear_update_page` - Update an existing page\n- `bear_delete_page` - Delete a page permanently\n- `bear_publish_page` - Toggle page publish status\n\n### Settings Tools\n- `bear_get_blog_settings` - Get current blog configuration\n- `bear_update_blog_settings` - Update blog settings\n\n### Home Page Tools\n- `bear_get_home_page` - Get blog title, favicon, meta description, meta image, and content\n- `bear_update_home_page` - Update blog title, favicon, meta description, meta image, and content\n\n### Navigation Tools\n- `bear_get_navigation` - Get navigation menu links\n- `bear_update_navigation` - Update navigation menu with markdown links\n\n### Theme and Style Tools\n- `bear_list_themes` - List all available pre-built themes\n- `bear_get_styles` - Get current custom CSS\n- `bear_update_styles` - Update custom CSS\n- `bear_apply_theme` - Apply a pre-built theme (WARNING: overwrites custom CSS)\n\n### Resources\n- `bear://posts` - Formatted list of all posts\n- `bear://post/{id}` - Individual post content\n- `bear://pages` - Formatted list of all pages\n- `bear://page/{id}` - Individual page content\n\n## Premium Features\n\nThis MCP server was developed and tested using a **free Bear Blog account**. Some Bear Blog features require a [Bear Blog Pro subscription](https://bearblog.dev/dashboard/upgrade/) ($5/month or $49/year) and are not currently implemented:\n\n- **Email List Management**: Subscriber capture and newsletter functionality\n- **Media Upload**: Direct file and image uploading via MCP tools\n- **Custom Domains**: Domain configuration tools\n- **Advanced Analytics**: Detailed traffic and engagement metrics\n\nIf you have a Bear Blog Pro account and would like these features added, please [open an issue on GitHub](https://github.com/rmunoz33/bearblog-mcp/issues) or reach out to discuss implementation.\n\n## Testing\n\nRun the test scripts to verify functionality:\n\n```bash\n# Test post management\nuv run python tests/test_tools.py\n\n# Test page management\nuv run python tests/test_pages.py\n```\n\n## Development\n\nSee `research/` directory for API exploration scripts and `API_FINDINGS.md` for endpoint documentation.\n\n## License\n\nMIT\n\n## Credits\n\nBuilt with [FastMCP](https://github.com/jlowin/fastmcp) - The fast, Pythonic way to build MCP servers.\n",
    "bugtrack_url": null,
    "license": "MIT",
    "summary": "MCP server for Bear Blog integration",
    "version": "0.1.1",
    "project_urls": {
        "Homepage": "https://github.com/rockymunoz/bearblog-mcp-server",
        "Repository": "https://github.com/rockymunoz/bearblog-mcp-server"
    },
    "split_keywords": [
        "mcp",
        " bearblog",
        " blog",
        " model-context-protocol",
        " claude",
        " ai"
    ],
    "urls": [
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "4c9f702a0cf4a78151891f7233a211d42e5368948bf305ccc248a6d37f18d017",
                "md5": "7bd1df181b68e8037efa2c1f0ecefe8d",
                "sha256": "a35683d845825ca08630dec4bbc240ab0eea3d7a18262b7464d3853672c14340"
            },
            "downloads": -1,
            "filename": "bearblog_mcp_server-0.1.1-py3-none-any.whl",
            "has_sig": false,
            "md5_digest": "7bd1df181b68e8037efa2c1f0ecefe8d",
            "packagetype": "bdist_wheel",
            "python_version": "py3",
            "requires_python": ">=3.10",
            "size": 16094,
            "upload_time": "2025-10-13T00:21:52",
            "upload_time_iso_8601": "2025-10-13T00:21:52.840534Z",
            "url": "https://files.pythonhosted.org/packages/4c/9f/702a0cf4a78151891f7233a211d42e5368948bf305ccc248a6d37f18d017/bearblog_mcp_server-0.1.1-py3-none-any.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "4de71b34a7ec129e22aa371d9d5c9ba4c2c1ae75a7eabb49d6acb713e341a87e",
                "md5": "bbe72ae1975e86aab373a705e41ca77b",
                "sha256": "1b0d2fd2d8365eb639a826fc3315551713e7e341a19c7e44c93e5f8a433456b7"
            },
            "downloads": -1,
            "filename": "bearblog_mcp_server-0.1.1.tar.gz",
            "has_sig": false,
            "md5_digest": "bbe72ae1975e86aab373a705e41ca77b",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": ">=3.10",
            "size": 20077,
            "upload_time": "2025-10-13T00:21:53",
            "upload_time_iso_8601": "2025-10-13T00:21:53.992854Z",
            "url": "https://files.pythonhosted.org/packages/4d/e7/1b34a7ec129e22aa371d9d5c9ba4c2c1ae75a7eabb49d6acb713e341a87e/bearblog_mcp_server-0.1.1.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2025-10-13 00:21:53",
    "github": true,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "github_user": "rockymunoz",
    "github_project": "bearblog-mcp-server",
    "github_not_found": true,
    "lcname": "bearblog-mcp-server"
}