博客查询服务器

一个用于查询指定白名单博客内容的服务器,支持通过API或本地运行方式集成到LLM系统中。

  • by karthiks
  • Python
  • 本地部署
  • 更新于
在 GitHub 查看 karthiks/query_blogger_mcp_server

使用说明

查询Blogger MCP服务器

MCP服务器

  • 仅查询 (不修改),
  • 仅限您的白名单博客 (没有其他)托管在Blogger上](https://www.blogger.com/)平台。

为什么查询Blogger MCP服务器来阅读Blogger平台上的公共博客文章?

  • 配置简单,您就可以开始了。
  • 此服务器设计为安全、高效且易于与LLM一起使用。

参考项目:


1.如何使用这个图书馆?

1.1.获取Blogger API密钥

  • 首选 Google 云控制台.
  • 创建一个新项目(或选择一个现有项目)。
  • 导航到 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克隆存储库

```bash
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 工具已成功集成,如下图所示:

如果启用了此工具,您可以检查正在运行的工具,如下图所示:

下面是利用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