:用 TaoToken 統(tǒng)一 Key 搭建支持 MCP 的 Web 博客服務(wù))
1. 為什么要把 Web 博客服務(wù)接進 MCP如果你維護著一個 Web 博客服務(wù)大概率遇到過這種尷尬文章都在自己的數(shù)據(jù)庫里但想讓 AI 助手幫忙讀一篇文章、生成摘要、按主題找相關(guān)文章時只能手動復(fù)制粘貼。AI 工具鏈再強也夠不著你的博客數(shù)據(jù)。MCPModel Context Protocol就是來解決這個斷層的。它是一套讓 AI 客戶端比如 Cline、Claude Desktop 這類支持 MCP 的工具以標(biāo)準(zhǔn)方式調(diào)用外部能力的協(xié)議。你可以把博客服務(wù)包裝成一個 MCP Server對外暴露「讀取文章」「搜索文章」「生成摘要」這些工具AI 助手就能像調(diào)用本地函數(shù)一樣直接操作你的博客內(nèi)容。這篇要落地的場景很具體用 TaoToken 統(tǒng)一 Key 作為模型調(diào)用通道把一個 Web 博客服務(wù)改造成支持 MCP 的服務(wù)端然后在 Cline 里發(fā)起一次真實的博客文章讀取請求把端到端鏈路一次跑通。適合已經(jīng)有一個博客后端FastAPI、Flask、Express 都行、想讓內(nèi)容被 AI 助手直接讀取與操作的開發(fā)者。全程不需要你有多深的協(xié)議背景跟著配置和命令走即可。核心檢索詞先擺出來MCP 是協(xié)議Web 博客服務(wù)是被接入的對象TaoToken 提供統(tǒng)一的 Key 和 API 通道Cline 是驗證用的 AI 客戶端。四者串起來就是一條完整的「博客內(nèi)容 → AI 工具鏈」通路。2. TaoToken 前置統(tǒng)一 Key 與 API 通道在動手寫 MCP Server 之前先把模型調(diào)用這一層理順。MCP Server 里如果要調(diào)用大模型做摘要、生成內(nèi)容就需要一個穩(wěn)定的 API 通道。TaoToken 在這里的角色是統(tǒng)一入口一個 Key 走通模型對話、編碼等能力省得你在博客服務(wù)里維護多套密鑰。你需要準(zhǔn)備的東西一個 TaoToken 賬號登錄后在控制臺創(chuàng)建 API Key記下 API 基地址https://taotoken.net/api后面配置里會用到確認你要用的模型名在模型對話頁面能看到可用列表。創(chuàng)建 Key 的入口在控制臺的 API Keys 頁面生成后復(fù)制保存它只會完整顯示一次。這個 Key 會寫進 MCP Server 的環(huán)境變量不要硬編碼進代碼提交到倉庫。注意MCP Server 調(diào)用模型時請求頭用Authorization: Bearer 你的Key基地址用https://taotoken.net/api路徑按 OpenAI 兼容格式拼接即可。這樣你的博客服務(wù)不需要關(guān)心底層是哪家模型換模型只改一個配置項。如果你后面要做長期的編碼類 Agent 任務(wù)比如讓 AI 持續(xù)維護博客內(nèi)容可以了解下 Coding Plan它更適合高頻、長會話的場景只是偶爾調(diào)用模型做摘要用按量的 API Key 就夠了。3. 可復(fù)制配置settings.json 與 config.toml 骨架MCP 的配置分兩塊一塊是 AI 客戶端Cline側(cè)的settings.json告訴客戶端去哪啟動 MCP Server一塊是 MCP Server 自己的config.toml放模型通道和博客服務(wù)的連接信息。下面給的是可直接改用的骨架。3.1 Cline 側(cè) settings.jsonCline 的 MCP 配置一般放在它的 MCP 設(shè)置里結(jié)構(gòu)如下。command是啟動 MCP Server 的命令env里注入 TaoToken 的 Key 和基地址{ mcpServers: { blog-service: { command: python, args: [-m, blog_mcp.server], env: { TAOTOKEN_API_KEY: sk-你的Key, TAOTOKEN_BASE_URL: https://taotoken.net/api, TAOTOKEN_MODEL: 你的模型名, BLOG_BASE_URL: http://localhost:8001 } } } }這里BLOG_BASE_URL指向你自己的 Web 博客服務(wù)MCP Server 會通過 HTTP 去讀文章。command用python -m的方式啟動前提是你的 MCP Server 已經(jīng)裝成了可導(dǎo)入的包或者你直接寫絕對路徑的腳本。3.2 MCP Server 側(cè) config.tomlMCP Server 自己讀一份config.toml把模型通道和博客接口分開管理方便本地調(diào)試和部署切換[model] api_key sk-你的Key base_url https://taotoken.net/api model 你的模型名 timeout 30 [blog] base_url http://localhost:8001 list_path /blog_posts/ detail_path /blog_posts/{post_id} search_path /blog_posts/search [server] name blog-service transport stdiotransport stdio表示用標(biāo)準(zhǔn)輸入輸出和客戶端通信這是 Cline 本地拉起 MCP Server 最常用的方式。如果你要部署成遠程服務(wù)可以改成 SSE 或 HTTP但本地驗證階段 stdio 最省事。提示config.toml里的api_key建議用環(huán)境變量覆蓋代碼里寫成os.environ.get(TAOTOKEN_API_KEY, config[model][api_key])這樣本地調(diào)試和線上部署用同一份代碼。4. MCP Server 啟動命令與工具注冊配置就緒后寫 MCP Server 的核心邏輯。它要做三件事連上博客服務(wù)、注冊工具、把工具暴露給客戶端。4.1 安裝依賴pip install mcp httpx tomlimcp是官方 Python SDKhttpx用來異步請求博客接口tomli讀config.tomlPython 3.11 以下需要3.11 可用內(nèi)置tomllib。4.2 注冊博客讀取工具下面是一個最小可用的 MCP Server暴露兩個工具list_posts列出文章read_post讀取單篇import os import httpx from mcp.server import Server from mcp.server.stdio import stdio_server from mcp.types import Tool, TextContent app Server(blog-service) BLOG_BASE os.environ.get(BLOG_BASE_URL, http://localhost:8001) app.list_tools() async def list_tools(): return [ Tool( namelist_posts, description列出博客所有文章, inputSchema{type: object, properties: {}}, ), Tool( nameread_post, description按 ID 讀取一篇博客文章, inputSchema{ type: object, properties: {post_id: {type: integer}}, required: [post_id], }, ), ] app.call_tool() async def call_tool(name: str, arguments: dict): async with httpx.AsyncClient(timeout30) as client: if name list_posts: resp await client.get(f{BLOG_BASE}/blog_posts/) return [TextContent(typetext, textresp.text)] if name read_post: post_id arguments[post_id] resp await client.get(f{BLOG_BASE}/blog_posts/{post_id}) return [TextContent(typetext, textresp.text)] raise ValueError(f未知工具: {name}) async def main(): async with stdio_server() as (read, write): await app.run(read, write, app.create_initialization_options()) if __name__ __main__: import asyncio asyncio.run(main())這段代碼的關(guān)鍵點app.list_tools()聲明有哪些工具app.call_tool()處理實際調(diào)用。工具描述寫清楚AI 客戶端才知道什么時候該調(diào)它。4.3 啟動命令本地單獨測試 MCP Server 時直接跑python -m blog_mcp.server如果通過 Cline 的settings.json拉起就不用手動執(zhí)行客戶端會自動啟動。想確認它是否正常可以在終端手動跑一次看有沒有報錯。5. 驗證請求用 Cline 讀取一篇博客文章鏈路搭好后做一次端到端驗證。這一步的目標(biāo)是在 Cline 里發(fā)一句話讓它通過 MCP 讀到你的博客文章。5.1 確認博客服務(wù)在跑先確保你的 Web 博客服務(wù)已經(jīng)啟動比如uvicorn blog_service:app --host 0.0.0.0 --port 8001用瀏覽器或 curl 訪問http://localhost:8001/blog_posts/能看到文章列表 JSON 就說明博客側(cè)正常。5.2 在 Cline 里發(fā)起請求打開 Cline確認 MCP 面板里blog-service顯示為已連接。然后在對話框輸入類似幫我讀取博客里 ID 為 1 的文章并總結(jié)它的核心內(nèi)容。Cline 會先調(diào)用read_post工具拿到文章 JSON再調(diào)用模型走 TaoToken 通道生成摘要。整個過程你能在 Cline 的工具調(diào)用記錄里看到read_post的入?yún)⒑头祷亍?.3 成功結(jié)果長什么樣一次成功的調(diào)用你會看到Cline 顯示「正在調(diào)用工具 read_post」參數(shù){post_id: 1}工具返回文章正文的 JSON模型基于正文輸出一段摘要內(nèi)容和你博客里的文章一致。如果摘要內(nèi)容對得上文章說明「Cline → MCP Server → 博客服務(wù) → TaoToken 模型」這條鏈路全通了。這一步是整個實戰(zhàn)的驗收點跑通它后面擴展搜索、生成、推薦都只是加工具的事。6. 本篇常見錯排查鏈路跑不通問題通常集中在幾個地方。下面按現(xiàn)象給排查方向。6.1 Cline 里看不到 blog-service先看settings.json的 JSON 格式有沒有寫錯多一個逗號都會導(dǎo)致解析失敗。再看command和args能不能在終端手動跑通——如果python -m blog_mcp.server報ModuleNotFoundError說明包路徑不對改用腳本絕對路徑比如args: [/abs/path/server.py]。6.2 工具調(diào)用返回連接錯誤read_post報連接失敗多半是BLOG_BASE_URL不對。MCP Server 和博客服務(wù)如果在不同容器里localhost是不通的要換成實際可達的地址。本地開發(fā)時確認博客服務(wù)端口和配置里一致。6.3 模型調(diào)用 401 或超時摘要生成失敗但工具調(diào)用成功問題在 TaoToken 通道。檢查TAOTOKEN_API_KEY是否注入成功TAOTOKEN_BASE_URL是否為https://taotoken.net/api。401 一般是 Key 錯了或沒帶上超時則把timeout調(diào)大或檢查網(wǎng)絡(luò)出口。6.4 工具被調(diào)用但參數(shù)為空Cline 調(diào)用read_post時post_id為空通常是inputSchema里沒標(biāo)required。把必填字段寫進required數(shù)組客戶端才會強制傳參。6.5 中文返回亂碼TextContent返回時確保用resp.text而不是resp.content前者按文本解碼后者是字節(jié)。如果博客接口本身返回的編碼不對在博客側(cè)統(tǒng)一設(shè)Content-Type: application/json; charsetutf-8。排障時優(yōu)先看 MCP Server 的 stderr 輸出Cline 會把它的日志展示出來報錯信息基本都在那里。接入相關(guān)的配置細節(jié)可以對照接入文檔逐項核對Key 的管理和重新生成在 API Keys 頁面操作。7. 把博客能力繼續(xù)擴展下去跑通讀取只是起點。同樣的模式你可以再加search_posts按關(guān)鍵詞搜文章、summarize_post調(diào)模型生成摘要、create_draft讓 AI 寫草稿存回博客。每加一個工具就是在list_tools里多聲明一項、在call_tool里多一個分支。我自己的習(xí)慣是先把工具描述寫清楚再寫實現(xiàn)——描述寫得好AI 客戶端才知道什么時候該調(diào)、怎么傳參這比代碼本身更影響體驗。模型通道統(tǒng)一走 TaoToken 后換模型只改config.toml一行博客服務(wù)完全不用動。如果你打算讓 AI 長期參與博客維護比如自動整理舊文、批量生成摘要可以考慮 Coding Plan 這類更適合長會話的方案只是偶爾讀一篇文章當(dāng)前的 API Key 配置已經(jīng)夠用。下一步試著把search_posts加上然后在 Cline 里問一句「幫我找關(guān)于 MCP 的文章」看它能不能自己完成搜索加讀取的組合動作。