Skip to main content
Glama

cnblogs MCP Server

MCP Server Python License

Wraps the cnblogs Open API into tools callable by AI via the MCP (Model Context Protocol) protocol. Allows you to publish cnblogs posts directly using natural language in any MCP client (QwenPaw, Claude Desktop, Cline, etc.).


Features

  • create_post — Publish Markdown blog posts to cnblogs

  • ✅ Token managed via .env, no hardcoding

  • ✅ Supports integration with any MCP client


Related MCP server: feishu-markdown-mcp

Table of Contents


Quick Start

1. Clone / Download the project

git clone https://github.com/你的用户名/cnblogs-mcp.git
cd cnblogs-mcp

2. Create a virtual environment

python -m venv .venv
source .venv/bin/activate      # macOS / Linux
# .venv\Scripts\activate       # Windows

3. Install dependencies

pip install -r requirements.txt

4. Configure Token

cp .env.example .env

Edit .env and fill in your cnblogs Personal Access Token:

CNBLOGS_TOKEN=your_token_here

5. Run tests

# 验证 MCP 服务能正常启动
printf '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2024-11-05","capabilities":{},"clientInfo":{"name":"test","version":"1.0"}}}\n{"jsonrpc":"2.0","id":2,"method":"tools/list","params":{}}\n' \
  | python cnblogs_mcp.py 2>/dev/null | grep '"name"'

Normal output:

{"jsonrpc":"2.0","id":2,"result":{"tools":[{"name":"create_post",...}]}}

Get Token

  1. Log in to cnblogs

  2. Go to Personal Settings → Security Settings → Personal Access Token

  3. Click "Create Token", fill in the name and permissions (requires "Post Blog" permission)

  4. Copy the generated Token and fill it into the .env file

⚠️ The Token is only displayed once, please save it properly.


Client Integration

1. QwenPaw

Find agent.json in the QwenPaw working directory and add the MCP client:

{
  "mcp": {
    "clients": {
      "cnblogs": {
        "name": "cnblogs",
        "description": "博客园博文发布",
        "enabled": true,
        "transport": "stdio",
        "command": "/absolute/path/to/cnblogs-mcp/.venv/bin/python",
        "args": ["/absolute/path/to/cnblogs-mcp/cnblogs_mcp.py"],
        "env": {
          "DOTENV_PATH": "/absolute/path/to/cnblogs-mcp/.env"
        }
      }
    }
  }
}

Restart QwenPaw:

qwenpaw daemon restart

2. Claude Desktop

Add to ~/Library/Application Support/Claude/claude_desktop_config.json:

{
  "mcpServers": {
    "cnblogs": {
      "command": "/absolute/path/to/cnblogs-mcp/.venv/bin/python",
      "args": ["/absolute/path/to/cnblogs-mcp/cnblogs_mcp.py"],
      "env": {
        "DOTENV_PATH": "/absolute/path/to/cnblogs-mcp/.env"
      }
    }
  }
}

Restart Claude Desktop.

3. Cline / Roo Code

Search for "MCP" in VS Code settings, find MCP Servers, and add:

{
  "cnblogs": {
    "command": "/absolute/path/to/cnblogs-mcp/.venv/bin/python",
    "args": ["/absolute/path/to/cnblogs-mcp/cnblogs_mcp.py"],
    "env": {
      "DOTENV_PATH": "/absolute/path/to/cnblogs-mcp/.env"
    }
  }
}

4. Other MCP Clients

General configuration template:

Parameter

Value

command

.venv/bin/python (Python in the project virtual environment)

args

["./cnblogs_mcp.py"]

env.DOTENV_PATH

Absolute path to the .env file

💡 If the MCP client does not support DOTENV_PATH, you can also pass the token directly using env.CNBLOGS_TOKEN.


Manual Testing

cd cnblogs-mcp

# 测试 1:初始化 + 工具列表
printf '...' | python cnblogs_mcp.py

# 测试 2:发布一篇博文
printf '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2024-11-05","capabilities":{},"clientInfo":{"name":"test","version":"1.0"}}}\n{"jsonrpc":"2.0","id":2,"method":"tools/call","params":{"name":"create_post","arguments":{"title":"测试","body":"## 你好\n\n这是一篇测试文章。"}}}\n' | python cnblogs_mcp.py 2>/dev/null

Normal return:

{"success": true, "postId": 12345678, "postUrl": "https://www.cnblogs.com/你的博客名/p/12345678"}

Error Handling

Error Message

Reason

Solution

CNBLOGS_TOKEN not configured

.env not configured or path error

Check if .env file exists and DOTENV_PATH is correct

API Error: 401

Token invalid or expired

Re-create Token on cnblogs

API Error: 403

Insufficient Token permissions

Ensure "Post Blog" is checked when creating the Token

API Error: 400

Request format error

Check if title and body are empty

Request timeout

Network issue

Check network and retry

Tool list empty after MCP connection

show_banner issue

Ensure mcp.run(show_banner=False) is used


API Reference

Tool: create_post

Parameters:

Parameter

Type

Required

Description

title

string

Blog post title

body

string

Blog post body (Markdown format)

Return Value:

{
  "success": true,
  "postId": 19246558,
  "postUrl": "https://www.cnblogs.com/你的博客名/p/19246558"
}

Or on error:

{
  "success": false,
  "error": "错误描述"
}

Development

Project Structure

cnblogs-mcp/
├── cnblogs_mcp.py     # MCP 服务主文件
├── requirements.txt   # Python 依赖
├── .env.example       # 环境变量模板(不含真实 Token)
├── .env               # 你的本地配置(已在 .gitignore 中)
├── .gitignore
├── README.md
└── LICENSE

Dependencies

fastmcp>=3.0.0
python-dotenv>=1.0.0
requests>=2.31.0

License

MIT — Stars, Forks, and PRs are welcome!

F
license - not found
Not graded
quality - not tested
D
maintenance

Maintenance

Maintainers
Response time
Release cycle
Releases (12mo)
Commit activity

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Servers

View all related MCP servers

Related MCP Connectors

  • Create, update, and publish changelog entries on your Patchlog changelog from any MCP client.

  • MCP-native collaborative markdown editor with real-time AI document editing

  • Publish AI-generated HTML & Markdown to a hosted, shareable URL via MCP.

View all MCP Connectors

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/mintonzhang/cnblogs-mcp'

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