MCP 服务器实战:让模型连上外部 API

发布时间:2026/8/28 11:09:03

MCP 服务器实战:让模型连上外部 API
MCP 服务器实战让模型连上外部 API【免费下载链接】skillsPublic repository for Agent Skills项目地址: https://gitcode.com/GitHub_Trending/skills3/skills你让模型查一下这个仓库的 Issue顺便打个 bug 标签它却连 API 都不会调只能你每次手写请求、再把结果贴回去。skills 仓库里的 mcp-builder 技能给了一套完整的 MCP 服务器搭建流程用 TypeScript 或 Python 把任何外部服务接进模型API 调用从此不用手写胶水代码。30 秒跑起来把下面内容存成mcp.py这是可用服务器的最小骨架from mcp.server.fastmcp import FastMCP mcp FastMCP(github_mcp) mcp.tool(namegithub_list_issues, annotations{readOnlyHint: True}) async def github_list_issues(repo: str) - str: 列出指定仓库的 Issue。 return f{repo} 的 Issue这是占位实现稍后接真实 API if __name__ __main__: mcp.run()python mcp.py # 启动默认 stdio 传输 npx modelcontextprotocol/inspector mcp.py # 打开可视化测试页Inspector 打开后工具列表里会出现github_list_issues点一下执行立刻返回字符串说明服务器活了。整个流程里你只做了声明工具这一件事协议握手、JSON-RPC 封包、传参全是框架干的。执行结果能正常回显就证明收到请求、调用函数、返回结果这一圈走通了之后把函数体换成真实 API 调用协议层一行不用动。核心机制拆解工具声明的最小代码每个工具就像插在模型身上的标准插座设备是什么无所谓插头形状对得上就能用。落到协议上工具由名字、描述、输入 schema 和处理器四件事组成。TypeScript 与 Python 写法同构只是形态不同TypeScript官方 SDKPythonFastMCPconst server new McpServer({ name: github-mcp-server })server.registerTool(github_list_issues,{ title: List Issues, description: 列出仓库全部 Issue,inputSchema: IssueSchema, annotations: { readOnlyHint: true } },async (params) callApi(params))mcp FastMCP(github_mcp)mcp.tool(namegithub_list_issues,annotations{readOnlyHint: True})async def github_list_issues(params: IssueQuery) - str:return await call_api(params)命名规范两者不同TS 服务器名用连字符{service}-mcp-serverPython 用下划线{service}_mcp。工具名两种语言保持一致服务前缀加蛇形命名比如github_list_issues、slack_send_message前缀的作用是防止和同一客户端下的其他工具撞名。四件事各有各的用途。name 是模型调用的入口description 是模型选工具的依据input schema 不止用来校验它还会原样发给模型模型看着字段约束生成合法参数handler 才是你唯一要写业务逻辑的地方。annotations 字段则提前声明工具危不危险查询类工具把readOnlyHint设为true删除类把destructiveHint设为true客户端可以据此决定是否弹确认框。输入校验Zod 与 Pydantic 怎么写你可能会问模型乱传的参数怎么办校验层就是答案也是两种语言最像的地方。TS 用 Zod 写结尾加.strict()拒绝多余字段const IssueSchema z.object({ repo: z.string().min(2, 仓库名至少 2 个字符) .describe(格式 owner/repo如 vercel/next.js), limit: z.number().int().min(1).max(100).default(20) .describe(每页最多返回条数默认 20), offset: z.number().int().min(0).default(0) }).strict();Python 用 Pydantic模型类一份代码兼任校验规则和参数文档class IssueQuery(BaseModel): model_config ConfigDict(str_strip_whitespaceTrue, extraforbid) repo: str Field(..., min_length2, description格式 owner/repo) limit: int Field(default20, ge1, le100, description每页最多返回条数) offset: int Field(default0, ge0)两种语言里校验报错都不用你亲自 catchSDK 会先拦截转成模型能看懂的错误响应。但报错质量取决于你写在 schema 里的文案仓库名至少 2 个字符明显比框架默认提示有用。这里容易踩的坑TS 的 SDK 不会从 JSDoc 注释自动提取 description 字段不显式写出来模型就只看得见参数名传参全靠猜。Python 侧相反docstring 会被自动收进工具描述所以把返回值结构、错误情形、什么时候别用本工具直接写进 docstring这段文字就是模型的说明书。返回值长什么样返回值不是给你看的是给模型看的。上下文窗口是模型的短期记忆装什么、怎么装都得讲究。通行做法是支持两种格式默认 markdown时间戳转成人类可读ID 写在显示名括号后面冗余元数据砍掉客户端要程序化处理时传 json返回完整结构化字段字段名保持稳定。字段选取本身也是设计markdown 格式里一个用户对象只留 id、name、team别把各种尺寸的头像 URL 全塞回去json 格式则保留完整字段把过滤工作留给客户端。两种格式共用同一份数据源只是渲染不同。列表类工具的 JSON 返回值遵循一组固定字段{ total: 42, count: 20, offset: 0, items: [], has_more: true, next_offset: 20 }模型拿has_more判断还要不要再翻拿next_offset直接填进下一次调用不用猜。这里容易踩的坑只返回数组不带元数据模型不知道数据是否拿全要么反复调用要么在残缺数据上做错误判断。生产级加固错误响应怎么设计才不踩坑问题下游 API 返回 429你把原始堆栈一抛模型读不懂只会原地重试。做法错误文案统一收口到一个函数每条信息都带下一步动作。def _handle_api_error(e: Exception) - str: if isinstance(e, httpx.HTTPStatusError): code e.response.status_code if code 404: return 错误资源未找到请检查 ID 是否正确 if code 429: return 错误触发限流请稍后再试 return f错误API 返回状态码 {code} if isinstance(e, httpx.TimeoutException): return 错误请求超时请重试TS 侧思路相同捕获AxiosError按状态码分支超时时用ECONNABORTED识别。状态码之外超时与连接失败也要单独分支否则网络抖动会被当成 500 类错误上报模型会做错误的重试决策。错误文案的标准和维修店贴条一样请带证件明日再来是好的错误交易失败是坏的。分页与截断的字段约定问题一个仓库几千个 Issue一次全返回会撑爆上下文单次调用成本失控。做法limit上限压到 100每页默认 20对返回文本设CHARACTER_LIMIT示例里这个常量取 25000超了截半并附说明。const CHARACTER_LIMIT 25000; if (result.length CHARACTER_LIMIT) { response.truncated true; response.truncation_message 响应已截断请使用 offset 参数获取更多结果。; }六个分页字段各司其职total 是总量count 是本次条数offset 是当前起点items 是数据has_more 表示还有没有下一页next_offset 是下一页该填的值。模型不理解翻页这个概念但它理解还有下一页参数在这里。这里容易踩的坑是静默截断truncated标记和截断说明就是逼着模型去补数据或加过滤条件。验证与上线本地调试用 stdio 就够两步走完npm run build node dist/index.js # TS先编译再走 stdio npx modelcontextprotocol/inspector mcp.py # 或启动 Python 版做可视化测试远程上线切换 Streamable HTTPTS 用StreamableHTTPServerTransport配合 express每个请求新建一个 transport走无状态 JSON不持有会话横向扩容省事Python 只要mcp.run(transportstreamable_http, port8000)。工具代码一行不改传输层只是服务器穿的衣服工具本身不关心对端是管道还是网络。HTTP 起好后把 Inspector 指向远程端点验证路径与本地完全一致。单工具跑通之后下一步是把另一个服务前缀接进来或把过大的工具拆成职责更小的两个。mcp-builder 流程里还有一步值得做写 10 个真实业务问题让模型只用你的工具作答看它在哪里卡住。更多模式细节可以看仓库里的 TypeScript 实现指南 与 Python 实现指南。【免费下载链接】skillsPublic repository for Agent Skills项目地址: https://gitcode.com/GitHub_Trending/skills3/skills创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

5分钟给OpenCode装上插件:贴合工作流的AI编程助手扩展

5分钟给OpenCode装上插件:贴合工作流的AI编程助手扩展

2026/8/28 10:59:03

5分钟给OpenCode装上插件:贴合工作流的AI编程助手扩展 【免费下载链接】opencode The open source coding agent. 项目地址: https://gitcode.com/GitHub_Trending/openc/opencode 用AI编程助手写代码,你一定反复遇到这些麻烦:改完文件…

基于维基百科与大模型生成的文本分辨测验项目全解析

基于维基百科与大模型生成的文本分辨测验项目全解析

2026/8/28 10:59:03

先别急着去训练一个“AI 检测模型”。最近的 AI 应用开发和信息素养项目里,经常能遇到同一个问题:面对一段百科体文字,普通人到底能不能判断它来自维基百科的人类编辑,还是大模型生成的伪百科内容。如果不借助检测工具&#xff0c…

3行代码提取多人对话人声:Transformers语音分离

3行代码提取多人对话人声:Transformers语音分离

2026/8/28 10:59:03

3行代码提取多人对话人声:Transformers语音分离 【免费下载链接】transformers 🤗 Transformers: the model-definition framework for state-of-the-art machine learning models in text, vision, audio, and multimodal models, for both inference a…

智能算法实战指南:从模拟退火到全局优化,解决NP难题

智能算法实战指南:从模拟退火到全局优化,解决NP难题

2026/8/28 12:29:07

1. 项目概述:为什么我们需要一本“智能算法笔记”? 如果你参加过数学建模竞赛,或者在工作中处理过复杂的优化问题,大概率经历过这样的时刻:面对一个看似无解的NP难题,脑子里闪过“模拟退火”、“遗传算法”…

斗地主游戏机制设计:从随机发牌到可控手气的算法实现

斗地主游戏机制设计:从随机发牌到可控手气的算法实现

2026/8/28 12:29:07

1. 项目概述:从“手气”到“机制”的量化之路“手气”这个词,在牌局里太常见了。大家摸完牌,总会有人感叹“手气真好”,有人抱怨“手气真背”。但“手气”到底是什么?是纯粹的随机运气,还是可以被某种机制影…

markitdown 三步把 EPUB 电子书转成 Markdown 笔记

markitdown 三步把 EPUB 电子书转成 Markdown 笔记

2026/8/28 12:29:07

markitdown 三步把 EPUB 电子书转成 Markdown 笔记 【免费下载链接】markitdown Python tool for converting files and office documents to Markdown. 项目地址: https://gitcode.com/GitHub_Trending/ma/markitdown 手里有本 EPUB 电子书,想整理成能搜索、…

GetQzonehistory:5分钟完成QQ空间数据备份

GetQzonehistory:5分钟完成QQ空间数据备份

2026/8/28 12:29:07

GetQzonehistory:5分钟完成QQ空间数据备份 【免费下载链接】GetQzonehistory 获取QQ空间发布的历史说说 项目地址: https://gitcode.com/GitHub_Trending/ge/GetQzonehistory 想让 QQ 空间的老说说、留言、配图都在自己硬盘上留一份,用 GetQzoneh…

OpenCode 环境变量配置实战:4 组变量、3 套即抄配方

OpenCode 环境变量配置实战:4 组变量、3 套即抄配方

2026/8/28 12:29:07

OpenCode 环境变量配置实战:4 组变量、3 套即抄配方 【免费下载链接】opencode The open source coding agent. 项目地址: https://gitcode.com/GitHub_Trending/openc/opencode 改了 opencode.json 里的模型,重启 OpenCode 却还是旧模型&#xf…

Hermes Agent 智能数据分析助手:10 秒出图的快速教程

Hermes Agent 智能数据分析助手:10 秒出图的快速教程

2026/8/28 12:19:06

Hermes Agent 智能数据分析助手:10 秒出图的快速教程 【免费下载链接】hermes-agent The agent that grows with you 项目地址: https://gitcode.com/GitHub_Trending/he/hermes-agent 周五下班前,你要交一张月度销售趋势图,可 Python…

[光学原理与应用-521]:对光的错误理解与纠偏

[光学原理与应用-521]:对光的错误理解与纠偏

2026/8/27 11:10:02

首先光是一种能量的载体和形态,宏观上观察到的光是由无数个微观的光量子组成的,每个光子在产生的瞬间,其在真空的空间中以确定不变的速度沿着一个初始的方向一直向前,在微观层面,每个光量子的运动轨迹是以波函数所展现…

SIP通话转接原理与REFER方法实战解析

SIP通话转接原理与REFER方法实战解析

2026/8/27 7:25:23

1. 通话转接不是“挂断再拨号”,而是SIP会话的动态重定向你有没有遇到过这样的场景:客服坐席A正在和客户通电话,突然需要把这通对话无缝转给专家坐席B,客户完全感知不到中间的断连——既没听到忙音,也没被要求重新拨号…

Kolla-ansible单节点OpenStack部署实战:从环境准备到排坑指南

Kolla-ansible单节点OpenStack部署实战:从环境准备到排坑指南

2026/8/28 7:34:42

1. 为什么选择Kolla-ansible来部署单节点OpenStack?如果你正在寻找一种能把OpenStack从“概念”快速变成“可用的实验环境”的方法,那么Kolla-ansible几乎是当前最主流、最省心的选择。我见过太多人卡在手动编译依赖、配置服务、处理版本冲突的泥潭里&am…

基于Claude Code的开源AI求职框架:从职位搜索到Offer的全自动化闭环

基于Claude Code的开源AI求职框架:从职位搜索到Offer的全自动化闭环

2026/8/28 0:08:32

当AI助手能够独立完成从职位匹配、简历定制到面试准备的全链路求职流程时,求职不再是一场信息战,而是一场工程化战役。框架概述:本地运行的AI求职引擎这是一个构建在Claude Code之上的开源AI求职框架,核心理念是"在工作者的机…

Godot 4 仿 agar.io:相机缩放被 max_zoom 卡死,窗口越大球越小的根因与修复

Godot 4 仿 agar.io:相机缩放被 max_zoom 卡死,窗口越大球越小的根因与修复

2026/8/28 0:08:32

1. 问题现象 在 Godot 4 仿 agar.io 的 2D 项目中,相机缩放设计为「由球组整体尺寸决定」,世界可见高度恒定,窗口只作为视口裁剪。默认小窗口 1280x720 时相机高度正常;但窗口最大化到 2940x1912 后,视角被明显拉远、…

从软件测试大赛到实战:Java+Selenium自动化测试进阶指南

从软件测试大赛到实战:Java+Selenium自动化测试进阶指南

2026/8/28 0:08:32

1. 缘起:从校园到赛场,我的软件测试之路几年前,我还是一个在校园里对着Java课本和“Hello World”程序挠头的普通学生。软件测试对我来说,只是一个在开发流程末尾、用鼠标点点按钮的模糊概念。直到我偶然在学校的公告栏上看到了“…

摆脱论文困扰!盘点2026年全网爆红的的AI论文写作工具

摆脱论文困扰!盘点2026年全网爆红的的AI论文写作工具

2026/8/28 7:35:26

一天写完毕业论文在2026年已不再是天方夜谭。2026年最炸裂、实测能大幅提速的AI论文写作工具,覆盖选题构思、文献整理、内容生成、格式排版等核心场景,真正帮你高效搞定论文难题。 一、全流程王者:一站式搞定论文全链路(一天定稿首…

导师推荐!2026最新AI论文工具测评与实用推荐

导师推荐!2026最新AI论文工具测评与实用推荐

2026/8/28 7:34:51

2026年真正好用的AI论文工具,核心看生成的论文质量、低AI味、格式正确、学术适配四大指标。综合实测,千笔AI、ThouPen、豆包、DeepSeek、Grammarly 是当前最值得推荐的梯队,覆盖从免费到付费、从中文到英文、从文科到理工的全场景需求。 一、…

告别游戏崩溃:XCOM 2模组管理器的智能革命

告别游戏崩溃:XCOM 2模组管理器的智能革命

2026/8/28 7:34:35

告别游戏崩溃:XCOM 2模组管理器的智能革命 【免费下载链接】xcom2-launcher The Alternative Mod Launcher (AML) is a replacement for the default game launchers from XCOM 2 and XCOM Chimera Squad. 项目地址: https://gitcode.com/gh_mirrors/xc/xcom2-lau…