LlamaCloud MCP 本地服务器

@run-llama/llamacloud-mcp
0 Stars 215 次浏览 run-llama 更新于 2026-08-23

一个本地MCP服务器,集成了克劳德桌面端,启用了RAG功能,为克劳德提供来自自定义LlamaCloud索引的最新私有信息。

MCP 服务配置

复制以下 JSON 到 OPClaw 或其他 MCP 客户端的配置文件中即可使用

{
  "mcpServers": {
    "filesystem": {
      "args": [
        "-y",
        "@modelcontextprotocol/server-filesystem",
        "\u003cyour directory you want filesystem tool to have access to\u003e"
      ],
      "command": "npx"
    },
    "llama_index_docs_server": {
      "args": [
        "llamacloud-mcp@latest",
        "--index",
        "your-index-name:Description of your index",
        "--index",
        "your-other-index-name:Description of your other index",
        "--extract-agent",
        "extract-agent-name:Description of your extract agent",
        "--project-name",
        "\u003cYour LlamaCloud Project Name\u003e",
        "--org-id",
        "\u003cYour LlamaCloud Org ID\u003e",
        "--api-key",
        "\u003cYour LlamaCloud API Key\u003e"
      ],
      "command": "uvx"
    }
  }
}

该服务需要配置环境变量:LLAMA_CLOUD_API_KEY、OPENAI_API_KEY

服务介绍

LlamaIndex MCP 演示

此仓库展示了如何使用 LlamaCloud 创建一个 MCP 服务器,以及如何将 LlamaIndex 用作 MCP 客户端。

LlamaCloud 作为 MCP 服务器

要提供一个可以被像 Claude Desktop 这样的客户端使用的本地 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,也可以使用其他任何语言模型。

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

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

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

@mcp.tool()
def llama_index_documentation(query: str) -> str:
    """Search the llama-index documentation for the given query."""

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

    response = index.as_query_engine().query(query + " Be verbose and include code examples.")

    return str(response)

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

最后,运行服务器:

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

注意 stdio 传输方式,这是用来与 Claude Desktop 通信的。

配置 Claude Desktop

  1. 安装 Claude Desktop
  2. 在菜单栏中选择 Claude -> Settings -> Developer -> Edit Config。这会显示一个可以在你喜欢的文本编辑器中编辑的配置文件。
  3. 你的配置应该看起来像这样(确保将 $YOURPATH 替换为仓库路径):
{
    "mcpServers": {
        "llama_index_docs_server": {
            "command": "poetry",
            "args": [
                "--directory",
                "$YOURPATH/llamacloud-mcp",
                "run",
                "python",
                "$YOURPATH/llamacloud-mcp/mcp-server.py"
            ]
        }
    }
}

确保在配置文件后重启 Claude Desktop。

现在你准备好进行查询了!你应该能在 Claude Desktop 的查询框下方看到带有你服务器列表的工具图标,如下所示:

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,
    # Optional: Filter the tools by name
    # 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="You are an agent that knows how to build agents in LlamaIndex.",
)

async def run_agent():
    response = await agent.run("How do I instantiate an agent in LlamaIndex?")
    print(response)

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

一切就绪!现在你可以使用代理来回答来自 LlamaCloud 索引的问题了。