查询Blogger MCP服务器
MCP服务器
- 仅查询 (不修改),
- 仅限您的白名单博客 (没有其他)托管在Blogger上\](https://www.blogger.com/)平台。
为什么查询Blogger MCP服务器来阅读Blogger平台上的公共博客文章?
- 配置简单,您就可以开始了。
- 此服务器设计为安全、高效且易于与LLM一起使用。
______________________________________________________________________
1.如何使用这个图书馆?
1.1.获取Blogger API密钥
- 首选 谷歌云控制台.
- 创建一个新项目(或选择一个现有项目)。
- 引导到
APIs & Services > Library.
- 搜索“Blogger API”并启用它。
- 首选
APIs & Services > Credentials.
- 单击“创建凭据”并选择“API密钥”。
- 复制生成的API密钥。
- 至关重要的是, 限制您的API密钥! 编辑API密钥:
- 在...之下 API restrictions,选择 Restric key 并选择 Blogger API 从下拉列表中。这确保了这个密钥只能调用Blogger API。 - 在...之下 Application restrictions,您可以选择添加 HTTP referrers 如果您的核心代理始终从特定域调用,或者如果您的MCP服务器始终在特定IP上运行,则为“IP地址”。 - 对于大多数企业内部使用,API限制可能就足够了,但引用者或IP限制会增加另一层。
1.2.设置 Query Blogger MCP Server
1.2.1克隆存储库
git clone https://github.com/karthiks/query_blogger_mcp_server
1.2.2 无容器方法: 安装了Python的主机
- 设置环境:
> 先决条件:pyenv已安装,用于安装python 3.10.16版本。
cd query_blogger_mcp_server
python -m venv .venv
pyenv versions
pyenv local 3.10.16
pyenv version # python --version
python -m venv .venv
source .venv/bin/activate
pip install .
# pip install query_blogger_mcp_server- 配置此MCP服务器
#Copy .env.example to .env:
cp .env.example .env
# Edit the .env file and fill in BLOGGER_API_KEY, ALLOWED_DOMAINS, and optionally adjust MCP_SERVER_NAME, MCP_SERVER_VERSION, UVICORN_HOST, UVICORN_PORT.
# On Windows (in cmd or PowerShell before starting server.py)
#$env:BLOGGER_API_KEY="YOUR_ACTUAL_BLOGGER_API_KEY"
# On Linux/macOS
#export BLOGGER_API_KEY="YOUR_ACTUAL_BLOGGER_API_KEY"最终用户只需修改 .env 文件(或直接在部署管道中设置环境变量)来配置MCP服务器,提供更流畅、更安全的体验。
- 运行此MCP服务器
# Run MCP Server in STDIO mode
python -m query_blogger_mcp_server.server --stdio
# Run MCP Server in HTTP mode
python -m query_blogger_mcp_server.server
# Or, the production-ready way if you have `query_blogger_mcp_server` installed:
# uvicorn query_blogger_mcp_server.server:mcp.app --host 0.0.0.0 --port 8000 --workers 1 # Add workers for production这将启动您的MCP服务器,通常在http://0.0.0.0:8000.
1.2.2 容器化方法: 安装了Docker的主机
- 设置环境:
cd query_blogger_mcp_server
# Build Docker Image: This command reads your Dockerfile and creates a Docker image for your application. Wait for the build process to complete. You should see output indicating each step of the Dockerfile being executed.
docker build -t query-blogger-mcp-server .
- 运行Docker容器以启动MCP服务器
docker run -d \
--name blogger_mcp_instance \
-p 8000:8000 \
-e BLOGGER_API_KEY="your_actual_google_blogger_api_key_here" \
-e ALLOWED_DOMAINS="kartzontech.blogspot.com,blog.codonomics.com" \
query-blogger-mcp-server- docker run:创建和运行容器的命令。 - -d:以“分离”模式(在后台)运行容器,因此您的终端保持空闲。 - --name blogger_mcp_instance:分配一个唯一的名称 blogger_mcp_instance 到你的跑步容器。这使得以后更容易参考(例如,用于停止或查看日志)。 - -p 8000:8000:这是端口映射。它将主机(计算机)上的端口8000映射到Docker容器内的端口8000。 - -e BLOGGER_API_KEY="...":这将在容器中设置一个名为BLOGGER_API_KEY的环境变量。 - query-blogger-mcp-server:这是您在上一步中构建的Docker镜像的名称。
> 您的MCP服务器现在应该在Docker容器中运行,可以通过以下方式访问http://localhost:8000从您的主机!
- 验证Docker容器是否已启动并正在运行
docker ps
# You should see a list of running containers, and blogger_mcp_instance should be among them, with 0.0.0.0:8000->8000/tcp in the PORTS column.- 查看容器日志(用于调试/监控)
docker logs blogger_mcp_instance- 停止并移除容器(完成后)
docker stop blogger_mcp_instance
docker rm blogger_mcp_instance> 完成后,最好停止并删除容器以释放资源。
1.3.配置核心代理(LLM系统)
然后,您的核心代理(例如Ollama部署的Qwen2.5应用程序)将被配置为:
- 指向您的MCP服务器的URL(http://your-mcp-server-ip:8000).
- 提供以下工具定义
FastMCP自动生成get_blog_info_by_url和get_latest_posts_by_blog_url.
当用户询问博客内容时,LLM将学习调用这些工具。
1.3.1将本地托管的Query Blogger MCP服务器集成到Claude桌面
Claude Desktop似乎还不支持与MCP服务器的HTTP传输集成,因此我向以STDIO模式运行的本地MCP服务器展示了集成配置
您的claude桌面配置文件 claude_desktop_config.json 将有以下代码段
{
"mcpServers": {
"query_blogger": {
"command": "wsl",
"args": [
"bash", "-c",
"cd /absolute/path/to/your/query_blogger_mcp_server/in/wsl && source .venv/bin/activate && python -m query_blogger_mcp_server.server --stdio"
]
}
}
}更改此配置文件后,重新启动claude桌面以检查 query_blogger 工具已成功集成,如下图所示:
如果启用了此工具,您可以检查正在运行的工具,如下图所示:
Demo of Query Blogger Tool In Action
下面是利用Query Blogger MCP的对话截图中的链接:
______________________________________________________________________
2.使用法学硕士进行测试:
当您向连接到此MCP服务器的LLM发送提示时:
- 允许的域: “你能告诉我关于博客的事吗
https://blog.codonomics.com?"
- 预期: LLM电话 get_blog_info_by_url 到您的MCP服务器。MCP服务器调用Blogger API,返回信息。LLM生成摘要。
- 允许的域名、帖子: “最近有什么帖子
https://blog.codonomics.com?"
- 预期: LLM电话 get_latest_posts_by_blog_url 到您的MCP服务器。MCP服务器调用Blogger API,返回帖子。LLM总结。
- 不允许的域: “什么新闻
https://disallowed-website.com?"
- 预期: LLM可能还会打电话 get_blog_info_by_url 但是你的MCP服务器 _is_allowed_domain 检查将触发。它将返回一条错误消息: "Access denied: This tool can only query blogs from pre-approved domains"。然后,LLM应将此消息中继给用户。
- 修改尝试: 如果你不小心暴露了
create_post工具,并且LLM尝试使用它,Blogger API本身可能会拒绝API密钥(因为它仅用于只读访问),并且MCP服务器将返回错误。但是,通过仅定义只读工具,您可以抢先一步。
______________________________________________________________________
演示客户端LLM代理利用此QueryBloggerMCPServer
# Terminal 1
# First Start MCP Server
cd query_blogger_mcp_server
source .venv/bin/activate
python -m query_blogger_mcp_server.server
# Terminal 2
# Pre-requisite: You have qwenqwen2.5:0.5b model installed via Ollama
ollama run qwen2.5:0.5b
# Terminal 3
# Start LLM Agent that calls the MCP server
python -m query_blogger_mcp_server.server
cd query_blogger_mcp_server/demo/
source .venv/bin/activate
python ollama_mcp_agent.py
# Prompt:
# YOU: Tell me about our blog?
# AI: **Summary:** The provided blog is called **Codonomics** and it was published on April 26, 2010. It's an online platform focused on democratizing knowledge and experience.______________________________________________________________________
发展与贡献
感谢您对Query Blogger MCP Server开发工作的考虑!
我鼓励社区发布问题并创建拉取请求。
在您开始之前,请查看我们的 贡献指南.
______________________________________________________________________
ToDos
[X] MVP: Allow Single Domain
[X] Allow Multiple Domains
[X] User Oboarding with README.md
[X] User onboarding with demo client llm agent leveraging this mcp server
[X] Dev Onboarding with README-DEV.md
[X] Externalize configurations
[X] Containerize with Docker
[X] Integration with Claude Desktop
[X] Security Fix: Upgrade to Vulnerable free Docker Image version (3.10 images have 2 critical vulnerabilityes) - Python-v3.14??
[ ] Unit Test Cases
[ ] Features
- [X] Get Blog Information by URL (get_blog_info_by_url)
- [X] Get Latest Posts by Blog URL (get_latest_posts_by_blog_url)
- Return response in Markdown format instead of raw HTML.
- [X] Search posts for query terms