案例目标
本案例展示了如何将LlamaIndex中的代理工具转换为MCP(Model Context Protocol)工具,实现以下目标:
- 演示如何将LlamaHub中的代理工具转换为MCP工具
- 以Notion工具为例,展示完整的转换过程
- 创建并配置FastMCP服务器
- 注册LlamaIndex工具到MCP服务器
- 运行MCP服务器并提供工具访问
技术栈与核心依赖
llama-index-tools-notion
mcp
fastmcp
FastMCP
NotionToolSpec
Model Context Protocol (MCP)
本案例主要使用LlamaIndex的Notion工具规范和FastMCP服务器,将LlamaIndex代理工具转换为MCP工具,使其可以通过MCP协议被其他应用程序访问。
环境配置
1安装依赖包
!pip install llama-index-tools-notion mcp fastmcp
2导入MCP服务器依赖
# Import dependencies for Model Context Protocol (MCP) fastMCP server
from typing import Any, Dict, List, Optional
from fastmcp import FastMCPprint("MCP fastMCP server dependencies imported successfully!")
MCP fastMCP server dependencies imported successfully!
案例实现
1. 实例化LlamaIndex工具
使用API密钥实例化Notion工具规范。
# Import and configure LlamaIndex Notion Tool Spec
from llama_index.tools.notion import NotionToolSpecnotion_token = "xxxx"
tool_spec = NotionToolSpec(integration_token=notion_token)
2. 查看可用工具
查看Notion工具规范中可用的工具。
tools = tool_spec.to_tool_list()
for i, tool in enumerate(tools):
print(f"Tool {i+1}: {tool.metadata.name}")
Tool 1: load_data Tool 2: search_data
3. 创建并配置FastMCP服务器
创建FastMCP服务器,并注册每个工具。
mcp_server = FastMCP("MCP Agent Tools Server")
# Register the tools from the Notion ToolSpec
for tool in tools:
mcp_server.tool(
name=tool.metadata.name,
description=tool.metadata.description
)(tool.real_fn)
MCP Server configured with tools
4. 运行MCP服务器
运行MCP服务器,使其可以通过HTTP协议访问。
[06/27/25 16:27:47] INFO Starting MCP server 'MCP Agent Tools Server' with transport 'streamable-http' on http://127.0.0.1:8000/mcp/
INFO: Started server process [24668]
INFO: Waiting for application startup.
INFO: Application startup complete.
INFO: Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit)
INFO: 127.0.0.1:54201 - "POST /mcp/ HTTP/1.1" 200 OK
INFO: 127.0.0.1:54201 - "POST /mcp/ HTTP/1.1" 202 Accepted
INFO: 127.0.0.1:54203 - "GET /mcp/ HTTP/1.1" 200 OK
INFO: 127.0.0.1:54209 - "POST /mcp/ HTTP/1.1" 200 OK
INFO: Shutting down
ERROR: ASGI callable returned without completing response.
ERROR: Cancel 0 running task(s), timeout graceful shutdown exceeded
INFO: Waiting for application shutdown.
INFO: Application shutdown complete.
INFO: Finished server process [24668]
案例效果
本案例成功将LlamaIndex的Notion工具转换为MCP工具,实现了以下效果:
- 将LlamaIndex代理工具(如NotionToolSpec)转换为MCP工具
- 创建了一个名为"MCP Agent Tools Server"的FastMCP服务器
- 成功注册了load_data和search_data两个工具到MCP服务器
- 服务器通过streamable-http传输方式在http://127.0.0.1:8000/mcp/上运行
- 服务器能够处理POST和GET请求,返回适当的HTTP状态码
- 其他应用程序可以通过MCP协议访问这些工具
关键点:这种转换使LlamaIndex中的丰富工具生态系统可以通过MCP协议被更广泛的应用程序访问,大大扩展了这些工具的适用范围和互操作性。
案例实现思路
本案例的实现思路基于以下几个关键概念:
1工具抽象
LlamaIndex中的工具规范(如NotionToolSpec)提供了一组标准化的工具接口,这些工具可以被转换为其他协议格式。
2MCP协议适配
通过FastMCP服务器,将LlamaIndex工具适配到MCP协议,使它们可以通过标准化的MCP接口被访问。
3动态工具注册
通过遍历工具列表并动态注册到MCP服务器,实现工具的自动转换和暴露。
4HTTP传输
使用streamable-http传输方式,使MCP服务器可以通过HTTP协议被远程访问。
扩展建议
基于本案例,可以考虑以下扩展方向:
- 多工具集成:将多个LlamaIndex工具规范集成到同一个MCP服务器,提供更丰富的功能
- 自定义传输协议:实现其他传输协议,如WebSocket、gRPC等,适应不同的应用场景
- 工具分组与命名空间:实现工具分组和命名空间机制,便于管理和使用大量工具
- 认证与授权:添加认证和授权机制,保护MCP服务器和工具访问
- 工具元数据增强:增强工具元数据,提供更详细的工具描述、参数说明和使用示例
- 工具版本管理:实现工具版本管理机制,支持工具的升级和兼容性处理
- 性能监控:添加性能监控和日志记录功能,便于调试和优化
- 工具链组合:支持将多个工具组合成工具链,实现更复杂的功能
总结
本案例展示了如何将LlamaIndex中的代理工具转换为MCP工具,通过FastMCP服务器将这些工具暴露为MCP协议可访问的服务。这种转换方法简单直接,只需几行代码就能完成,大大扩展了LlamaIndex工具生态系统的适用范围。
通过MCP协议,LlamaIndex中的工具可以被更广泛的应用程序访问和使用,提高了工具的互操作性和可重用性。这种方法为构建更加开放和互联的AI应用生态系统提供了基础。
该案例的代码简洁明了,易于理解和扩展,为开发者提供了一个将LlamaIndex工具转换为MCP工具的标准模式。