返回市场
llama云-mcp

llama云-mcp

作者:run-llama217 星标更新:2025-07-07

项目介绍

LlamaIndex MCP 演示

llamacloud-mcp 是一个工具,允许您使用 LlamaCloud 作为 MCP 服务器。它可以用来查询 LlamaCloud 索引并从文件中提取数据。

它支持:

  • 指定一个或多个用于上下文检索的索引。
  • 指定一个或多个用于数据提取的提取代理。
  • 配置项目和组织 ID。
  • 配置 MCP 服务器使用的传输方式(stdio、sse、streamable-http)。

快速开始

  1. 安装 uv
  2. 运行 uvx llamacloud-mcp@latest --help 查看可用选项。
  3. 配置您的 MCP 客户端以使用 llamacloud-mcp 服务器。您可以直接运行 uvx llamacloud-mcp@latest 启动服务器,或者使用 claude_desktop_config.json 文件连接到 Claude 桌面。

使用方法

% uvx llamacloud-mcp@latest --help
用法: llamacloud-mcp [选项]

选项:
  --index 文本                    索引定义格式为 name:description。可以多次使用。
  --extract-agent 文本            提取代理定义格式为 name:description。可以多次使用。
  --project-id 文本               LlamaCloud 的项目 ID
  --org-id 文本                   LlamaCloud 的组织 ID
  --transport [stdio|sse|streamable-http]
                                  运行 MCP 服务器的传输方式。可选值为 "stdio"、"sse"、"streamable-http"。
  --api-key 文本                  LlamaCloud 的 API 密钥
  --help                          显示此消息并退出。

配置 Claude 桌面

  1. 安装 Claude 桌面
  2. 在菜单栏选择 Claude -> 设置 -> 开发者 -> 编辑配置。这会显示一个配置文件,您可以在首选文本编辑器中编辑该文件。
  3. 在配置文件中添加以下 "mcpServers",其中每个 --index 是一个新的索引工具,每个 --extract-agent 是一个提取代理工具。
  4. 您的配置应如下所示(确保替换 $YOURPATH 为存储库的路径):
{
    "mcpServers": {
        "llama_index_docs_server": {
            "command": "uvx",
            "args": [
                "llamacloud-mcp@latest",
                "--index",
                "your-index-name:您的索引描述",
                "--index",
                "your-other-index-name:您的其他索引描述",
                "--extract-agent",
                "extract-agent-name:您的提取代理描述",
                "--project-name",
                "<您的 LlamaCloud 项目名称>",
                "--org-id",
                "<您的 LlamaCloud 组织 ID>",
                "--api-key",
                "<您的 LlamaCloud API 密钥>"
            ]
        },
        "filesystem": {
        "command": "npx",
        "args": [
                "-y",
                "@modelcontextprotocol/server-filesystem",
                "<您希望文件系统工具访问的目录>"
            ]
        }
    }
}

确保在配置文件后重启 Claude 桌面

现在您可以进行查询了!您应该会在 Claude 桌面的查询框下方看到一个带有您服务器列表的工具图标,如下图所示:

从零开始使用 LlamaCloud 作为 MCP 服务器

为了提供一个客户端如 Claude 桌面可以使用的本地 MCP 服务器,您可以使用 mcp-server.py。您可以使用这个工具来提供一个使用 RAG 来为 Claude 提供最新私人信息的工具,以便回答问题。您可以根据需要提供任意数量的这些工具。

设置您的 LlamaCloud 索引

  1. 获取一个 LlamaCloud 账户
  2. 使用任何数据源创建一个新索引。在我们的案例中,我们使用了 Google Drive,并提供了 LlamaIndex 文档的一个子集作为来源。如果您只是想测试一下,也可以直接上传文档到索引。
  3. LlamaCloud UI 获取一个 API 密钥。

设置您的 MCP 服务器

  1. 克隆此仓库
  2. 创建一个 .env 文件,并添加两个环境变量:
    • LLAMA_CLOUD_API_KEY - 上一步获取的 API 密钥
    • OPENAI_API_KEY - 一个 OpenAI API 密钥。此密钥用于驱动 RAG 查询。如果您不想使用 OpenAI,可以使用 任何其他 LLM

现在让我们看看代码。首先实例化一个 MCP 服务器:

mcp = FastMCP('llama-index-server')

然后使用 @mcp.tool() 装饰器定义您的工具:

@mcp.tool()
def llama_index_documentation(query: str) -> str:
    """搜索给定查询的 llama-index 文档。"""

    index = LlamaCloudIndex(
        name="mcp-demo-2",
        project_name="随机项目",
        organization_id="e793a802-cb91-4e6a-bd49-61d0ba2ac5f9",
        api_key=os.getenv("LLAMA_CLOUD_API_KEY"),
    )

    response = index.as_query_engine().query(query + " 详细说明并包含代码示例。")

    return str(response)

这里我们的工具名为 llama_index_documentation;它实例化了一个名为 mcp-demo-2 的 LlamaCloud 索引,并将其用作查询引擎来回答查询,包括一些额外的提示指令。您将在下一节中获得如何设置您的 LlamaCloud 索引的说明。

最后,运行服务器:

if __name__ == "__main__":
    mcp.run(transport="stdio")

注意 stdio 传输方式,用于与 Claude 桌面通信。

LlamaIndex 作为 MCP 客户端

LlamaIndex 还有一个 MCP 客户端集成,这意味着您可以将任何 MCP 服务器转换为一组可以由代理使用的工具。您可以在 mcp-client.py 中看到这一点,我们使用 BasicMCPClient 连接到本地 MCP 服务器。

为了演示的简单性,我们使用上面刚刚设置的同一个 MCP 服务器。通常情况下,您不会使用 MCP 将 LlamaCloud 连接到 LlamaIndex 代理,而是使用 QueryEngineTool 并直接传递给代理。

设置您的 MCP 服务器

为了提供一个可以被 HTTP 客户端使用的本地 MCP 服务器,我们需要稍微修改 mcp-server.py,使用 run_sse_async 方法而不是 run。您可以在 mcp-http-server.py 中找到这一点。

mcp = FastMCP('llama-index-server', port=8000)

asyncio.run(mcp.run_sse_async())

从 MCP 服务器获取工具

mcp_client = BasicMCPClient("http://localhost:8000/sse")
mcp_tool_spec = McpToolSpec(
    client=mcp_client,
    # 可选:按名称过滤工具
    # allowed_tools=["tool1", "tool2"],
)

tools = mcp_tool_spec.to_tool_list()

创建代理并提问

llm = OpenAI(model="gpt-4o-mini")

agent = FunctionAgent(
    tools=tools,
    llm=llm,
    system_prompt="您是一个知道如何在 LlamaIndex 中构建代理的代理。",
)

async def run_agent():
    response = await agent.run("如何在 LlamaIndex 中实例化一个代理?")
    print(response)

if __name__ == "__main__":
    asyncio.run(run_agent())

一切就绪!现在您可以使用代理从您的 LlamaCloud 索引中回答问题。