当前位置: 首页 > news >正文

MCP Server 入门开发 + 协议调试 + 生产级部署

从 Hello World 到实用 Server 的距离

第 02 篇的 demo server 能运行,但只有echoadd两个玩具工具。生产级 Server 需要解决 5 个额外的工程问题:

  1. 多个工具如何协作,共享数据
  2. 用户输入如何验证(LLM 也会传错参数)
  3. 工具执行失败时如何正确返回错误
  4. 日志写到哪里(写错地方会破坏协议)
  5. Resources 如何让 LLM 获取上下文数据

Demo 是一个完整的 Jira Server,内置 mock 数据,不需要真实账号就能运行。


Server 结构总览

demo_jira_server.py 工具(4 个): search_issues(query, project?, status?, max_results?) get_issue(issue_key) create_issue(project, summary, description?, priority?, issue_type?) update_issue(issue_key, status?, assignee?, priority?) 资源(1 个): jira://projects → 项目列表(LLM 读取后知道有哪些合法 project key) Prompts(1 个): bug_analysis → Bug 分析报告模板

模式 1:多工具协作

4 个工具共享同一个内存数据存储ISSUES,形成完整的读写闭环:

# 共享的数据层(生产环境对应真实数据库/API)ISSUES:dict[str,dict]={"PROJ-101":{"key":"PROJ-101","summary":"NullPointerException in parseInput() when config is null","status":"Open","priority":"P1","issue_type":"Bug",...},...}# search_issues:查询# get_issue:精确读取# create_issue:写入新 Issue(递增 ID)# update_issue:修改已有 Issue

设计决策:把验证逻辑提取为共用函数validate_issue_key()get_issueupdate_issue都调用它,不重复写:

defvalidate_issue_key(key:str)->str|None:"""Return error message if key is invalid, None if valid."""ifnotkeyor"-"notinkey:returnf"Invalid issue key format: '{key}'. Expected format: PROJECT-123"project=key.split("-")[0]ifprojectnotinPROJECTS:returnf"Unknown project: '{project}'. Available projects:{', '.join(PROJECTS)}"
http://www.jsqmd.com/news/1173233/

相关文章:

  • 2026郑州黄金回收优选推荐,同城上门当面结算 - 奢侈品回收评测
  • 2026成都名包回收对比测评,易奢福报价高于同行多少? - ys韩
  • EasySoftware安全实践:保护openEuler应用数据的最佳方法
  • AD7490与PIC18LF4680高速ADC系统设计与优化
  • Windows/Linux 双平台 Telnet 服务配置对比:从安装到安全策略的 5 个关键步骤
  • OpenEuler/AOPS-Zeus配置溯源服务使用手册:轻松追踪与管理系统配置变更
  • 2026青岛手表回收市场深度调研:易奢福到店真实评测,三十余年老牌连锁实力几何? - ys韩
  • 等保三级系统密改实战:3种技术路径(免/重/易改造)成本与复杂度对比
  • VLM与BEV大一统:自动驾驶语义感知的范式升级
  • 2026年寿县装修市场深度盘点 金饰家装饰核心优势解析 - 装企自媒体训练营辉哥
  • 基于MA12070与R7FA6M3AH3CFC的高保真音频系统设计
  • 5分钟快速上手:免费开源游戏加速神器OpenSpeedy完全指南
  • PilotGo-plugin-prometheus核心功能详解:监控看板与告警管理的完整教程
  • UE5单主机NDisplay打包实战:5分钟搞定多屏输出与中文路径避坑
  • Meta Muse图像与视频生成模型:核心技术解析与应用实践
  • VSCode Remote SSH 连接 3 类性能瓶颈:从 SSH 配置到插件管理的全链路优化
  • STM32与DTH-08实现信号上下拉控制的工程实践
  • Makefile 变量与函数实战:5个核心函数处理100+源文件路径
  • 2026筑宅安|长治阳光房漏水专业修缮,家装商用玻璃顶渗漏、屋面工程一站式根治渗水难题 - 筑宅安
  • 基于MA12070与STM32L476RG的高保真音频系统设计
  • C++ vector模拟实现:从三指针模型到迭代器失效的底层原理
  • LabVIEW 2019 Windows 10 安装与激活:3步破解与首个VI程序实测
  • 2026筑宅安|承德阳光房漏水专业修缮,家装商用玻璃顶渗漏、屋面工程一站式根治渗水难题 - 筑宅安
  • TPA3128D2与PIC18F26K42构建高性价比数字功放方案
  • Arm Optimized Routines跨平台构建指南:如何在嵌入式系统和服务器端部署
  • 铂金首饰回收行情 2026 年 7 月,北京本地回收门店实测 - 生活时报
  • 3种 Elasticsearch-head 部署方案对比:npm、Docker、Chrome插件实测
  • QMC加密音乐格式解密全攻略:原理、工具与实战
  • MA12070与STM32F446RE音频系统设计与优化
  • 超低功耗电源管理方案:NBM7100A与STM32F100ZE实战