软件版本:llama-b11243
使用 llamacpp + llmaindex + FastMCP + mcp-cross
appmcpserver.py
代码摘要:
if __name__ == "__main__":
transport = os.environ.get("MCP_TRANSPORT", "stdio")
if transport == "stdio":
mcp.run(transport="stdio")
else:
# 关键修改:stateless_http 通过 http_app() 传入,而不是 FastMCP()
# 这样每个请求都是独立的,不再需要 Mcp-Session-Id
# 解决 mcp-cross 桥接时的 "Session not found" 问题
import uvicorn
app = mcp.http_app(json_response=True,stateless_http=True)
uvicorn.run(
app,
host=os.environ.get("MCP_HOST", "127.0.0.1"),
port=int(os.environ.get("MCP_PORT", "8000")),
log_level="warning",
)
启动命令:
set MCP_TRANSPORT=streamable-http
set MCP_HOST=127.0.0.1
set MCP_PORT=8000
set PYTHONUTF8=1
set PYTHONIOENCODING=utf-8
python.exe .\appmcpserver.py
验证mcpserver启动是否成功:
Get-Content .\req.jsonl | cmd /c npx mcp-cross --debug --header "Accept: application/json, text/event-stream" --http http://127.0.0.1:8000/mcp --timeout 120000
返回:
{"jsonrpc":"2.0","id":2,"result":{"tools":[{"_meta":{"fastmcp":{"tags":[]}},"description":"从本地知识库检索与问题最相关 的文档片段。\n\n返回的是**原文片段**,不是生成的答案。请基于这些片段组织你的回答。","inputSchema":{"properties":{"query":{"type":"string","description":"用户问题或检索关键词。"},"top_k":{"anyOf":[{"type":"integer"},{"type":"null"}],"default":null,"description":"返回的片段数量,默认使用服务器配置值。"}},"required":["query"],"type":"object","additionalProperties":false},"name":"query_knowledge_base","outputSchema":{"properties":{"result":{"type":"string"}},"required":["result"],"type":"object","x-fastmcp-wrap-result":true},"title":"Query Knowledge Base"},{"_meta":{"fastmcp":{"tags":[]}},"description":"检索知识库并返回带来源文件名的片段,便于溯源。","inputSchema":{"properties":{"query":{"type":"string","description":"用户问题或检索关键词。"},"top_k":{"anyOf":[{"type":"integer"},{"type":"null"}],"default":null,"description":"返回的 片段数量。"}},"required":["query"],"type":"object","additionalProperties":false},"name":"query_with_sources","outputSchema":{"properties":{"result":{"type":"string"}},"required":["result"],"type":"object","x-fastmcp-wrap-result":true},"title":"Query With Sources"},{"_meta":{"fastmcp":{"tags":[]}},"description":"列出当前知识库目录下的所有文档文件。","inputSchema":{"properties":{},"type":"object","additionalProperties":false},"name":"list_documents","outputSchema":{"properties":{"result":{"type":"string"}},"required":["result"],"type":"object","x-fastmcp-wrap-result":true},"title":"List Documents"},{"_meta":{"fastmcp":{"tags":[]}},"description":"重建向量索引。上传/删除文档后调用此工具让改动生效。","inputSchema":{"properties":{},"type":"object","additionalProperties":false},"name":"rebuild_index","outputSchema":{"properties":{"result":{"type":"string"}},"required":["result"],"type":"object","x-fastmcp-wrap-result":true},"title":"Rebuild Index"}]}}
[http-proxy] Stdin closed, stopping proxy
代表mcpserver http方式启动成功:
mcp-cross代理在mcp.json配置如下:
{
"mcpServers": {
"llamaindex-rag": {
"command": "cmd",
"args": [
"/c",
"npx",
"mcp-cross",
"--header",
"Accept: application/json, text/event-stream",
"--http",
"http://127.0.0.1:8000/mcp",
"--timeout",
"120000"
]
}
}
}
启动llama-server补充指定:
--tools all --mcp-servers-config ./mcp.json
启动llama-server结果如下:
启动日志中有 [34m0.01.049.314[0m [32mI [0msrv start: MCP warmup: 'llamaindex-rag' discovered 4 tools
表示通过mcp-cross http方式链接 mcp-server成功
效果如下:
它调用命令,把知识库里的内容检索出来。RAG部署完成。