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 索引的问题了。