Kiro中MCP Tools 完全指南:让 AI 助手直接操作你的开发环境

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 的命令(如pythonnpxuvx
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用途
Dockermcp-server-docker管理容器、镜像
Kubernetesmcp-server-kubernetes查看 Pod、服务状态
PostgreSQLmcp-server-postgresPostgreSQL 数据库操作
MongoDBmcp-server-mongodbMongoDB 操作
Elasticsearchmcp-server-elasticsearch搜索引擎操作
AWSaws-documentation-mcp-server查询 AWS 文档
GitHubmcp-server-githubPR、Issue 管理
Slackmcp-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 可以直接查询数据、发送消息、验证结果,将原本需要开发者在多个终端窗口手动操作的验证流程,变成一段自然语言对话。