ARTICLE DETAIL

建站实战干货

来自一线的建站与推广经验沉淀,每一条都经过真实交付验证。

用 MCP Server 封装企查查 API:TaoToken 统一 Key 接入与 Function Call 配置实战

2026/9/29 4:24:44 拓冰建站 浏览量
用 MCP Server 封装企查查 API:TaoToken 统一 Key 接入与 Function Call 配置实战 1. 为什么要在 TypeScript 里自己封装一个企业信息 MCP Server如果你正在用 Claude、Cherry Studio 或者 Cursor 这类支持 Function Call 的 AI 助手大概率遇到过这种尴尬问它「帮我查一下某某公司的工商信息」它要么一本正经地编要么告诉你「我无法访问实时数据」。原因很简单大模型本身没有联网查企业的能力它需要一个能真正发起 HTTP 请求的「手」——这就是 MCP Server 存在的意义。MCPModel Context Protocol是 Anthropic 主导的一套开放协议本质上是给大模型外挂工具的标准接口。你写一个 MCP Server把「查企业工商详情」封装成一个工具AI 助手在对话时就能自动识别意图、调用工具、拿到结构化结果再组织成人话回复。整个过程对用户是透明的你只需要说一句「查一下小米科技」剩下的交给 Function Call。这篇要做的是在 TypeScript 项目里用create-mcp-kit脚手架搭一个企业信息查询 MCP Server把企查查的「企业工商详情」接口接进来同时用 TaoToken 统一管理 Key 和 API 通道。为什么强调 TaoToken因为自己维护多个第三方 API 的 Key、签名、额度、限流非常琐碎TaoToken 提供统一的 Key 和兼容 OpenAI 的 API 通道MCP Server 里只需要读一个环境变量就能跑通省掉大量配置工作。适合谁看有基础 TypeScript 经验、想让 AI 助手具备实时企业查询能力的开发者或者你已经在用 MCP但还没试过自己封装一个带签名鉴权的第三方 API。跟着做从初始化到验证调用大概 30 分钟能跑通。2. 前置准备TaoToken 统一 Key 与项目初始化2.1 拿到 TaoToken 的 Key 和 API 通道TaoToken 的作用是把模型调用和第三方 API 的鉴权收敛到一个入口。先去官网注册账号然后在控制台创建 API Key。地址是https://taotoken.net/?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content注册后在「API Keys」页面生成一个 Key形如sk-xxxxxxxx。这个 Key 有两个用途一是作为 MCP Server 调用模型时的统一凭证二是通过 TaoToken 的 API 通道转发请求。API 基础地址是https://taotoken.net/api注意这个地址不带任何查询参数直接作为 base_url 使用即可。提示Key 只显示一次生成后立刻复制到本地.env文件不要提交到 Git。后面所有配置都从环境变量读取。2.2 用 create-mcp-kit 初始化项目create-mcp-kit是一个专门用来生成 MCP Server 项目的脚手架内置了 STDIO 传输、工具注册目录、TypeScript 配置和热重载。执行npm create mcp-kitlatest交互式向导里按下面选◇ Project type: MCP Server ◇ Project name: qcc-api-mcp-server ◇ Project language: TypeScript ◇ Project transport: STDIO ◇ Project template: Standard (recommended) ◇ Install dependencies? Yes生成后的目录结构大致是这样qcc-api-mcp-server/ ├── src/ │ ├── tools/ # MCP 工具实现 │ │ ├── index.ts # 工具统一注册入口 │ │ └── register*.ts │ ├── services/ # 传输层实现 │ │ ├── stdio.ts │ │ └── web.ts │ └── index.ts # 入口 ├── package.json └── tsconfig.json进入目录装依赖cd qcc-api-mcp-server npm install2.3 配置环境变量在项目根目录新建.envTAOTOKEN_API_KEYsk-你的TaoToken密钥 TAOTOKEN_BASE_URLhttps://taotoken.net/api QCC_KEY你的企查查Key QCC_SECRET_KEY你的企查查SecretKey企查查的 Key 和 SecretKey 需要去企查查开放平台申请「企业工商信息410」接口权限审核通过后拿到。这两个值用于生成 MD5 签名和 TaoToken 的 Key 是两套东西别搞混。3. 可复制配置签名工具、接口封装与 Function Call 注册3.1 实现企查查 MD5 签名企查查的接口用Key Timespan SecretKey拼接后做 MD5 大写摘要作为 Token。新建src/utils/sign.tsimport { createHash } from crypto export function generateToken(key: string, secretKey: string) { const timespan Math.floor(Date.now() / 1000).toString() const originStr key timespan secretKey const token createHash(md5) .update(originStr) .digest(hex) .toUpperCase() return { token, timespan } }这里有个容易踩的坑timespan必须是秒级时间戳用毫秒会导致签名校验失败返回Status: 401。3.2 封装企业工商详情接口新建src/services/qcc.ts把 HTTP 请求和错误处理收拢在一起import { generateToken } from ../utils/sign export interface CompanyDetail { Name: string CreditCode: string RegistCapi: string EconKind: string Scope: string Status: string } export async function getCompanyDetail(keyword: string) { const key process.env.QCC_KEY! const secretKey process.env.QCC_SECRET_KEY! const { token, timespan } generateToken(key, secretKey) const url new URL(https://api.qichacha.com/ECIV4/GetBasicDetailsByName) url.searchParams.append(key, key) url.searchParams.append(keyword, keyword) const res await fetch(url.href, { method: GET, headers: { Token: token, Timespan: timespan }, }) const data: any await res.json() if (data.Status ! 200) { return { success: false, message: data.Message || 未找到该企业 } } return { success: true, data: data.Result as CompanyDetail } }3.3 注册为 MCP 工具Function Call 核心MCP 工具的注册靠server.registerTool需要提供工具名、描述、输入 schema用 zod 定义和执行函数。新建src/tools/registerGetCompanyDetail.tsimport { z } from zod import type { McpServer } from modelcontextprotocol/sdk/server/mcp.js import { getCompanyDetail } from ../services/qcc export default function register(server: McpServer) { server.registerTool( GetCompanyDetail, { title: 查询企业工商信息, description: 实时查询企业工商信息返回企业名称、统一社会信用代码、注册资本、经营范围、经营状态等。, inputSchema: { keyword: z .string() .describe(搜索关键词支持企业全称或统一社会信用代码), }, }, async ({ keyword }) { const { success, data, message } await getCompanyDetail(keyword) return { content: [ { type: text, text: success ? JSON.stringify(data, null, 2) : message!, }, ], } }, ) }description字段非常关键大模型就是靠它判断「用户这句话该不该调用这个工具」。写得太模糊会导致模型不触发 Function Call写得太长又会占用上下文建议一句话说清「查什么、返回什么」。3.4 在入口注册工具修改src/tools/index.tsimport type { McpServer } from modelcontextprotocol/sdk/server/mcp.js import registerGetCompanyDetail from ./registerGetCompanyDetail export const registerTools (server: McpServer) { registerGetCompanyDetail(server) }3.5 客户端接入配置settings.json 骨架如果你用 Cherry Studio 或 Claude Desktop需要在它们的 MCP 配置里指向编译后的入口。以 Cherry Studio 为例在设置里导入{ mcpServers: { qcc-api-mcp-server: { command: node, args: [/绝对路径/qcc-api-mcp-server/build/index.js], env: { TAOTOKEN_API_KEY: sk-你的TaoToken密钥, TAOTOKEN_BASE_URL: https://taotoken.net/api, QCC_KEY: 你的企查查Key, QCC_SECRET_KEY: 你的企查查SecretKey } } } }注意args里必须是编译后的build/index.js绝对路径指向src/index.ts会报模块解析错误。先跑一次npm run build生成产物。4. 启动与验证一次真实的企业信息查询4.1 启动开发模式npm run devcreate-mcp-kit生成的模板默认会拉起 MCP Inspector你可以在浏览器里看到已注册的工具列表找到GetCompanyDetail在输入框填keyword为「小米科技有限责任公司」点执行。如果返回一段 JSON包含Name、CreditCode、RegistCapi等字段说明签名和请求链路都通了。4.2 编译并在 AI 助手里验证 Function Callnpm run build然后在 Cherry Studio 里选中一个支持 Function Call 的模型比如 Qwen 系列或 Claude 系列确保模型服务走的是 TaoToken 的 API 通道。在对话界面选中刚添加的qcc-api-mcp-server输入帮我查一下小米科技有限责任公司的工商信息模型会先输出一段「正在调用工具」的提示然后自动触发GetCompanyDetail把返回的结构化数据整理成可读的回复。整个过程你不需要手动点任何按钮这就是 Function Call 的价值。4.3 用 curl 单独验证 TaoToken 通道如果你想确认 TaoToken 的 API 通道本身没问题可以单独发一个请求curl https://taotoken.net/api/v1/models \ -H Authorization: Bearer $TAOTOKEN_API_KEY返回模型列表就说明 Key 和通道都正常。这一步和 MCP Server 是解耦的方便排障时定位问题出在哪一层。5. 本篇常见错误排查5.1 工具注册了但模型不调用最常见的原因是description写得太抽象比如只写「查询企业信息」。模型无法判断什么时候该用。改成「实时查询企业工商信息返回注册资本、经营范围、经营状态」这种具体描述触发率会明显提升。另外确认所选模型本身支持 Function Call部分小参数模型不支持工具调用。5.2 返回 Status 401 或签名错误九成是timespan用了毫秒或者SecretKey前后带了空格。检查.env里有没有多余引号generateToken里Math.floor(Date.now() / 1000)是否用了秒。另外企查查的 Token 有效期很短不要缓存复用。5.3 客户端报「spawn node ENOENT」settings.json里的command写node时某些客户端找不到全局 node 路径。改成which node输出的绝对路径比如/usr/local/bin/node。Windows 下用node.exe的完整路径。5.4 修改代码后工具没更新开发模式下 MCP Inspector 有热重载但客户端Cherry Studio / Claude Desktop不会自动重载。每次改完代码要npm run build然后在客户端里把 MCP Server 移除再重新添加或者重启客户端。5.5 环境变量读不到create-mcp-kit模板默认不加载.env。在src/index.ts顶部加一行import dotenv/config并npm install dotenv。如果是在客户端配置里通过env字段注入的就不需要 dotenv但要确认字段名和代码里process.env.XXX完全一致大小写敏感。6. 把链路跑通之后下一步可以做什么到这里从 TaoToken 拿 Key、用create-mcp-kit搭 TypeScript 项目、封装企查查签名接口、注册 Function Call 工具、到在 AI 助手里真实查询整条链路已经闭环。你可以直接复用的几个点generateToken的签名逻辑适用于企查查所有接口registerTool的 schema 写法可以套用到任何第三方 APITaoToken 的统一 Key 让你换模型时不用改 MCP Server 代码。如果后面要接更多工具比如企业风险、股东信息、对外投资只需要在src/tools/下新增register*.ts在index.ts里加一行注册即可架构不用动。想验证模型对话效果可以去模型对话页面直接试如果是长期跑编码或 Agent 场景建议用 Coding Plan 管理额度接入文档和 API Keys 分别在文档页和控制台。把 Key 管好剩下的就是不断往工具箱里加工具。