Kiro中MCP Tools 完全指南:让 AI 助手直接操作你的开发环境
📅 2026/7/21 20:45:18
👁️ 阅读次数
📝 编程学习
Kiro中MCP Tools 完全指南:让 AI 助手直接操作你的开发环境
一、什么是 MCP Tools
MCP(Model Context Protocol)是一种标准化协议,让 AI 助手能够与外部工具和服务交互。MCP Tools 就是通过这个协议暴露给 AI 的"工具函数"——AI 可以像调用 API 一样直接调用这些工具,操作数据库、消息队列、文件系统等。
简单理解:MCP Tools 是 AI 助手的"手",让它从"只能说"变成"能动手做"。
与传统开发工具的区别
| 对比项 | 传统命令行工具 | MCP Tools |
|---|---|---|
| 操作者 | 人手动输入命令 | AI 自动调用 |
| 交互方式 | 命令行/GUI | 自然语言描述需求 |
| 上下文 | 每次独立执行 | AI 保持对话上下文 |
| 组合能力 | 需要写脚本串联 | AI 自动编排多个工具 |
注:
博客:
https://blog.csdn.net/badao_liumang_qizhi
二、MCP 架构概览
┌─────────────┐ ┌─────────────┐ ┌──────────────────┐ │ AI 助手 │ ──→ │ MCP Client │ ──→ │ MCP Server │ │ (Kiro) │ ←── │ (内置) │ ←── │ (提供 Tools) │ └─────────────┘ └─────────────┘ └──────────────────┘ │ ▼ ┌──────────────────┐ │ 实际服务 │ │ (MySQL/Redis/ │ │ RabbitMQ等) │ └──────────────────┘- MCP Client:内置在 AI 助手(如 Kiro)中,负责发现和调用工具
- MCP Server:独立进程,暴露一组 Tools 供 AI 调用
- 通信方式:通过 stdio(标准输入输出)或 HTTP 传递 JSON-RPC 消息
三、MCP Server 配置方式
配置文件位置
- 工作区级别:
.kiro/settings/mcp.json(仅当前项目生效) - 用户级别:
~/.kiro/settings/mcp.json(所有项目生效)
配置结构
{"mcpServers":{"server-name":{"command":"执行命令","args":["参数列表"],"env":{"环境变量KEY":"环境变量VALUE"},"disabled":false,"autoApprove":["tool1","tool2"]}}}| 字段 | 说明 |
|---|---|
command | 启动 MCP Server 的命令(如python、npx、uvx) |
args | 命令参数 |
env | 传给 MCP Server 的环境变量 |
disabled | 是否禁用 |
autoApprove | 不需要人工确认就能自动执行的工具列表 |
四、常用 MCP Tools 分类与示例
4.1 数据库类:MySQL MCP Server
安装方式:
{"mysql":{"command":"uvx","args":["mcp-server-mysql@latest"],"env":{"MYSQL_HOST":"localhost","MYSQL_PORT":"3306","MYSQL_USER":"root","MYSQL_PASSWORD":"password","MYSQL_DATABASE":"my_database"}}}提供的 Tools:
| Tool | 功能 | 使用示例 |
|---|---|---|
list_tables | 列出所有表 | “查看数据库有哪些表” |
describe_table | 查看表结构 | “查看 user 表的字段” |
fetch_data | 执行 SELECT 查询 | “查询最近10条订单” |
execute_query | 执行任意 SQL | “更新订单状态为已取消” |
create_table | 创建表 | “创建一个日志表” |
insert_data | 插入数据 | “往 config 表插入一条配置” |
实际对话示例:
用户:查看 xxmaster 表中已取消的订单 AI调用:fetch_data("SELECT id, order_code, order_status FROM xxmaster WHERE order_status = 0 LIMIT 5") 返回:[(53, 'KE.191108.000004', 0), (55, 'KE.191108.000006', 0)]4.2 消息队列类:RabbitMQ MCP Server
配置方式(自建本地版):
{"rabbitmq":{"command":"python","args":["/absolute/path/to/rabbitmq_mcp_server.py"],"env":{"RABBITMQ_HOST":"localhost","RABBITMQ_PORT":"5672","RABBITMQ_USERNAME":"guest","RABBITMQ_PASSWORD":"guest","RABBITMQ_VHOST":"/"}}}提供的 Tools:
| Tool | 功能 | 使用示例 |
|---|---|---|
test_connection | 测试连接 | “测试下 MQ 能不能连上” |
check_queue | 查看队列状态 | “看看 order-queue 有多少条消息” |
publish_message | 发送消息 | “发一条测试消息到 order-queue” |
get_message | 读取消息 | “看看队列里第一条消息内容” |
实际对话示例:
用户:查看待发货队列有多少未消费的消息 AI调用:check_queue("xxx.delivery.save.wait.delivery.info") 返回:{"queue": "...", "message_count": 15, "consumer_count": 2} AI回答:队列中有15条待消费消息,当前有2个消费者在处理。4.3 缓存类:Redis MCP Server
配置方式:
{"redis":{"command":"npx","args":["-y","@modelcontextprotocol/server-redis","redis://:password@localhost:6379/0"]}}提供的 Tools:
| Tool | 功能 | 使用示例 |
|---|---|---|
get | 获取 key 的值 | “查看 user:1001 的缓存” |
set | 设置 key-value | “设置限流开关为开启” |
delete | 删除 key | “清除这个用户的缓存” |
list_keys | 列出匹配的 key | “查看所有以 order: 开头的缓存” |
4.4 版本控制类:Git MCP Server
配置方式:
{"git":{"command":"mcp-server-git","args":["--repository","/path/to/your/repo"]}}提供的 Tools:
| Tool | 功能 | 使用示例 |
|---|---|---|
git_status | 查看文件变更状态 | “看看改了哪些文件” |
git_diff_unstaged | 未暂存的变更 | “看看具体改了什么” |
git_log | 查看提交历史 | “最近5次提交是什么” |
git_commit | 提交代码 | “提交当前变更” |
git_create_branch | 创建分支 | “创建一个 fix 分支” |
4.5 网络请求类:Fetch MCP Server
配置方式:
{"fetch":{"command":"uvx","args":["mcp-server-fetch@latest"]}}提供的 Tools:
| Tool | 功能 | 使用示例 |
|---|---|---|
fetch | 发送 HTTP 请求 | “调用本地接口测试一下” |
4.6 文件系统类:Filesystem MCP Server
配置方式:
{"filesystem":{"command":"npx","args":["-y","@modelcontextprotocol/server-filesystem","/allowed/path"]}}提供的 Tools:
| Tool | 功能 |
|---|---|
read_file | 读取文件内容 |
write_file | 写入文件 |
list_directory | 列出目录内容 |
search_files | 搜索文件 |
move_file | 移动/重命名文件 |
4.7 其他常用 MCP Server
| 类别 | MCP Server | 用途 |
|---|---|---|
| Docker | mcp-server-docker | 管理容器、镜像 |
| Kubernetes | mcp-server-kubernetes | 查看 Pod、服务状态 |
| PostgreSQL | mcp-server-postgres | PostgreSQL 数据库操作 |
| MongoDB | mcp-server-mongodb | MongoDB 操作 |
| Elasticsearch | mcp-server-elasticsearch | 搜索引擎操作 |
| AWS | aws-documentation-mcp-server | 查询 AWS 文档 |
| GitHub | mcp-server-github | PR、Issue 管理 |
| Slack | mcp-server-slack | 发送消息通知 |
五、自建 MCP Server 开发指南
当现有开源 MCP Server 不满足需求时(如连接阿里云私有服务),可以自己开发。
5.1 Python 版(推荐)
"""自定义 MCP Server 模板."""importosfrommcp.server.fastmcpimportFastMCP mcp=FastMCP("my-custom-server")@mcp.tool()defmy_tool(param1:str,param2:int=10)->str:"""工具描述-AI会根据这个描述决定何时调用此工具. Args: param1: 参数1的说明 param2: 参数2的说明,默认值10 Returns: 执行结果的字符串描述 """# 实现你的业务逻辑result=do_something(param1,param2)returnf"执行成功:{result}"@mcp.tool()defanother_tool(name:str)->str:"""另一个工具的描述."""returnf"Hello,{name}!"if__name__=="__main__":mcp.run(transport="stdio")5.2 开发要点
| 要点 | 说明 |
|---|---|
| 函数签名 | 参数需有类型注解,AI 依赖类型信息理解如何调用 |
| 文档字符串 | AI 根据 docstring 决定何时调用哪个工具,写清楚 |
| 返回值 | 必须返回字符串,AI 需要能理解返回内容 |
| 异常处理 | 用 try-except 包裹,返回错误信息而不是抛异常 |
| 环境变量 | 敏感信息(密码等)通过 env 传入,不要硬编码 |
| 传输方式 | 默认用stdio,适合本地进程间通信 |
5.3 完整自定义示例:HTTP API 测试工具
"""HTTP API 测试 MCP Server."""importjsonimportosimporturllib.requestimporturllib.errorfrommcp.server.fastmcpimportFastMCP BASE_URL=os.environ.get("API_BASE_URL","http://localhost:8080")AUTH_TOKEN=os.environ.get("API_AUTH_TOKEN","")mcp=FastMCP("api-tester")@mcp.tool()defapi_get(path:str)->str:"""发送GET请求到指定路径. Args: path: API路径,如 /api/users/1 Returns: 响应内容 """try:url=f"{BASE_URL}{path}"req=urllib.request.Request(url)ifAUTH_TOKEN:req.add_header("Authorization",f"Bearer{AUTH_TOKEN}")withurllib.request.urlopen(req,timeout=30)asresponse:body=response.read().decode("utf-8")returnf"状态码:{response.status}\n响应体:{body}"excepturllib.error.HTTPErrorase:returnf"请求失败:{e.code}{e.reason}"exceptExceptionase:returnf"请求异常:{str(e)}"@mcp.tool()defapi_post(path:str,body:str)->str:"""发送POST请求. Args: path: API路径 body: 请求体JSON字符串 Returns: 响应内容 """try:url=f"{BASE_URL}{path}"data=body.encode("utf-8")req=urllib.request.Request(url,data=data,method="POST")req.add_header("Content-Type","application/json")ifAUTH_TOKEN:req.add_header("Authorization",f"Bearer{AUTH_TOKEN}")withurllib.request.urlopen(req,timeout=30)asresponse:resp_body=response.read().decode("utf-8")returnf"状态码:{response.status}\n响应体:{resp_body}"excepturllib.error.HTTPErrorase:error_body=e.read().decode("utf-8")ife.fpelse""returnf"请求失败:{e.code}{e.reason}\n{error_body}"exceptExceptionase:returnf"请求异常:{str(e)}"if__name__=="__main__":mcp.run(transport="stdio")配置:
{"api-tester":{"command":"python","args":["/path/to/api_tester_mcp_server.py"],"env":{"API_BASE_URL":"http://localhost:8080","API_AUTH_TOKEN":"your-token-here"}}}六、Tools 组合使用场景
MCP Tools 的真正威力在于组合使用。AI 可以在一次对话中调用多个不同的 Tools 完成复杂任务。
场景1:MQ 消息驱动的功能验证
1. [MySQL] 查询测试数据,找到合适的订单 2. [MySQL] 修改订单状态模拟业务场景 3. [RabbitMQ] 发送消息到目标队列 4. [RabbitMQ] 检查消息是否被消费 5. [MySQL] 验证数据库状态是否正确变更 6. [MySQL] 还原测试数据场景2:问题排查
1. [MySQL] 查询异常订单数据 2. [Redis] 查看相关缓存状态 3. [Git] 查看最近变更了什么代码 4. [MySQL] 对比上下游数据一致性 → AI 综合分析给出问题原因场景3:自动化部署验证
1. [Git] 检查当前分支和状态 2. [API-Tester] 调用健康检查接口 3. [MySQL] 验证数据库迁移是否完成 4. [Redis] 确认缓存预热完成 → AI 输出部署验证报告七、开发注意事项
7.1 MCP Server 脚本路径
// ❌ 错误:相对路径不可靠"args":[".kiro/tools/my_server.py"]// ✅ 正确:使用绝对路径"args":["D:\\Project\\my-app\\.kiro\\tools\\my_server.py"]7.2 消息序列化兼容性
如果目标系统使用 Java 序列化(如 SpringSimpleMessageConverter),Python MCP Server 发送的 JSON 消息无法被正确反序列化。这种情况下:
- 用 MCP Tools 做查看和验证(查队列状态、读消息)
- 用Java 单元测试做消息发送
7.3 安全性
- 敏感信息通过
env环境变量传递,不要硬编码在脚本中 autoApprove谨慎配置,只允许只读操作自动执行- 生产环境的连接信息不要配置在 MCP 中
7.4 连接稳定性
- MCP Server 是长驻进程,网络不稳定时可能断连
- 在 Kiro 的 MCP Server 面板中可以手动重连
- 配置保存后 Kiro 会自动重连
八、总结
| 核心概念 | 说明 |
|---|---|
| MCP Server | 提供 Tools 的独立进程 |
| Tool | 一个可被 AI 调用的函数 |
| 配置 | 通过mcp.json声明 Server 的启动方式和参数 |
| 调用 | AI 根据用户需求自动选择合适的 Tool 调用 |
| 组合 | 多个 Server 的多个 Tools 可以在一次对话中串联使用 |
MCP Tools 的价值在于将 AI 从"纸上谈兵"升级为"亲自动手"。通过配置合适的 Tools,AI 可以直接查询数据、发送消息、验证结果,将原本需要开发者在多个终端窗口手动操作的验证流程,变成一段自然语言对话。
编程学习
技术分享
实战经验