LLM MCP TOOLS
åºäºFastMCP 2.0çæºèœå·¥å ·è°åºŠç³»ç»
Ask AI about LLM MCP TOOLS
Powered by Claude · Grounded in docs
I know everything about LLM MCP TOOLS. Ask me about installation, configuration, usage, or troubleshooting.
0/500
Reviews
Documentation
ð LLM MCP Tools - æºèœå·¥å ·è°åºŠç³»ç»
åºäº FastMCP 2.0 çæºèœå·¥å ·è°åºŠç³»ç» | æ¯æç¥è¯åŸè°±ãåéæçŽ¢ã宿¶è¿åºŠæŸç€º
ç¹æ§ ⢠快éåŒå§ â¢ æ¶æ â¢ ææ¡£ ⢠莡ç®
ð ç®ä»
LLM MCP Tools æ¯äžäžªåºäº Model Context Protocol (MCP) å FastMCP 2.0 æå»ºçæºèœå·¥å ·è°åºŠç³»ç»ãå®éè¿å€§æš¡åç Function Calling èœåïŒè®© AI èœå€èªäž»éæ©åè°çšåç§å·¥å ·ïŒå®ç°ä»ç®å计ç®å°å€æç¥è¯åŸè°±åæçå šæµçšèªåšåã
ð¯ éçšåºæ¯
- ð¢ äŒäžç¥è¯ç®¡çïŒææ¡£äžäŒ ãåéæ£çŽ¢ãç¥è¯åŸè°±æå»º
- ðŒ äžå¡æ°æ®åæïŒåå·¥ä¿¡æ¯æ¥è¯¢ãéšéšç»è®¡ãæ°æ®å¯è§å
- ð€ æºèœå©æåŒåïŒå€èœ®å¯¹è¯ãå·¥å ·è°åºŠã宿¶åéŠ
- ð MCP åè®®åŠä¹ ïŒè§£èŠæ¶æãæ å忥å£ãå·¥å ·æ³šå
âš æ žå¿ç¹æ§
ð§ äž°å¯çå·¥å ·çæ
| ç±»å« | å·¥å ·æ°é | äž»èŠåèœ |
|---|---|---|
| ð æ°æ®åºå·¥å · | 6䞪 | åå·¥æ¥è¯¢ãéšéšç»è®¡ãèªèµåæ |
| ð ç¥è¯åºå·¥å · | 3䞪 | ææ¡£äžäŒ ãåéæçŽ¢ãææ¡£ç®¡ç |
| ð§ ç¥è¯åŸè°±å·¥å · | 7䞪 | å®äœæœåãå ³ç³»æå»ºãåŸè°±æ¥è¯¢ãè·¯åŸåæ |
| 𧮠计ç®å·¥å · | 3䞪 | æ°åŠè¿ç®ãç»è®¡åæãåäœèœ¬æ¢ |
| â° æ¶éŽå·¥å · | 4䞪 | åœåæ¶éŽãæ¥æè®¡ç®ãæ¶åºèœ¬æ¢ |
| ð APIå·¥å · | 3䞪 | HTTP请æ±ãå€©æ°æ¥è¯¢ãå€éšæ¥å£ |
æ»è®¡ïŒ26+ äžªå·¥å ·åœæ°
ðš ç¬ç¹äŒå¿
â
è§£èŠæ¶æïŒMCP Server å Web App å®å
šåçŠ»ïŒæ¯æç¬ç«éšçœ²åæ©å±
â
èªåšåç°ïŒæ°å¢å·¥å
·èªåšæ³šåïŒæ éä¿®æ¹å®¢æ·ç«¯ä»£ç
â
ç¥è¯åŸè°±ïŒèªåšæåå®äœå
³ç³»ïŒæ¯æåŸè°±å¯è§ååè·¯åŸæ¥è¯¢
â
宿¶è¿åºŠïŒææ¡£å€çè¿çšå®æ¶æŸç€ºïŒçšæ·äœéªå奜
â
åéæçŽ¢ïŒåºäº ChromaDB çé«æææ¡£æ£çŽ¢
â
å€èœ®å¯¹è¯ïŒæ¯æäžäžæçè§£åäŒè¯ç®¡ç
â
æ ååè®®ïŒéµåŸª MCP æ åïŒæäºæ©å±åéæ
ðïž ç³»ç»æ¶æ
æ¶æåŸ
âââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ
â çšæ·æµè§åš â
â (http://localhost:8000) â
ââââââââââââââââââââââââââ¬âââââââââââââââââââââââââââââââââââââ
â WebSocket (宿¶éä¿¡)
â
âââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ
â Web App (FastAPI) â
â âââââââââââââââ ââââââââââââââââ ââââââââââââââââ â
â â WebSocket â â MCP Client â â LLM Client â â
â â Handler ââ â (HTTPè°çš) ââ â (éä¹åé®) â â
â âââââââââââââââ ââââââââââââââââ ââââââââââââââââ â
â â â
ââââââââââââââââââââââââââââŒââââââââââââââââââââââââââââââââââââ
â HTTP (MCP Protocol)
â
âââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ
â MCP Server (FastMCP 2.0) â
â âââââââââââââââââââââââââââââââââââââââââââââââââââââââââ â
â â å·¥å
·æ³šåäžå¿ (@mcp.tool()) â â
â âââââââââââââââââââââââââââââââââââââââââââââââââââââââââ â
â â â â â â
â ââââââââââââ ââââââââââââ ââââââââââââ ââââââââââââ â
â â æ°æ®åºå·¥å
· â â ç¥è¯åºå·¥å
· â â ç¥è¯åŸè°± â â 计ç®å·¥å
· â â
â ââââââââââââ ââââââââââââ ââââââââââââ ââââââââââââ â
ââââââââ¬âââââââââââââââ¬âââââââââââââââ¬âââââââââââââââ¬ââââââââââ
â â â â
â â â â
MySQL ChromaDB(åé) NetworkX(åŸè°±) å€éšAPI
ææ¯æ
- åç«¯æ¡æ¶ïŒFastAPI + FastMCP 2.0
- 倧暡åïŒéä¹åé® QwenïŒæ¯æ Function CallingïŒ
- æ°æ®åºïŒMySQLïŒç»æåæ°æ®ïŒ + ChromaDBïŒåéæ°æ®åºïŒ
- ç¥è¯åŸè°±ïŒNetworkXïŒåŸååšïŒ + OpenAI APIïŒå®äœæœåïŒ
- éä¿¡åè®®ïŒWebSocketïŒå®æ¶éä¿¡ïŒ + HTTPïŒMCPåè®®ïŒ
- å端ïŒåç JavaScript + Marked.jsïŒMarkdownæž²æïŒ
ð å¿«éåŒå§
ç¯å¢èŠæ±
- Python 3.10+
- MySQL 5.7+ïŒå¯éïŒçšäºæ°æ®åºå·¥å ·ïŒ
- éä¹åé® API Key
1. å é项ç®
git clone https://github.com/houmingya/LLM_MCP_TOOLS.git
cd LLM_MCP_TOOLS
2. å建èæç¯å¢
# äœ¿çš conda
conda create -n mcp-demo python=3.10 -y
conda activate mcp-demo
# æäœ¿çš venv
python -m venv venv
source venv/bin/activate # Linux/Mac
# venv\Scripts\activate # Windows
3. å®è£ äŸèµ
pip install -r requirements.txt
4. é 眮ç¯å¢åé
éèŠïŒé¡¹ç®äœ¿çšç¯å¢åéç®¡çææé 眮ïŒè¯·å¿çŽæ¥ä¿®æ¹ä»£ç äžçé 眮ïŒ
å€å¶ç¯å¢åéæš¡æ¿ïŒ
cp .env.example .env
çŒèŸ .env æä»¶ïŒå¡«å
¥äœ çé
眮ïŒ
# ========================
# 倧暡åé
眮ïŒå¿
å¡«ïŒ
# ========================
# éä¹åé® API KeyïŒå¿
é¡»é
眮ïŒ
# è·åå°åïŒhttps://dashscope.console.aliyun.com/apiKey
LLM_API_KEY=your_qwen_api_key_here
# æš¡ååç§°ïŒå¯éïŒqwen-plus, qwen-turbo, qwen-maxïŒ
LLM_MODEL_NAME=qwen-plus
# ========================
# MySQL æ°æ®åºé
眮ïŒå¯éïŒ
# ========================
# åŠæäžäœ¿çšæ°æ®åºå·¥å
·ïŒå¯ä»¥äžé
眮
DB_HOST=localhost
DB_PORT=3306
DB_USER=root
DB_PASSWORD=your_mysql_password_here
DB_DATABASE=test_db
# ========================
# æå¡ç«¯å£é
眮
# ========================
WEB_PORT=8000
MCP_PORT=8001
诊ç»é 眮诎æè¯·æ¥çïŒ é 眮æå
5. éªè¯é 眮
è¿è¡é 眮æµè¯ïŒ
python test_config.py
åŠæçå° "â é 眮éªè¯éè¿"ïŒè¯Žæé 眮æåïŒ
6. å¯åšæå¡æå¡
æ¹åŒäžïŒäžé®å¯åšïŒæšèïŒ
python run.py
è¿å°åæ¶å¯åšïŒ
- MCP Server:
http://localhost:8001/mcp - Web App:
http://localhost:8000
æ¹åŒäºïŒåå«å¯åšïŒåŒåè°è¯ïŒ
# ç»ç«¯1 - å¯åš MCP Server
python run_mcp_server.py
# ç»ç«¯2 - å¯åš Web App
python run.py --mode webapp
7. 访é®åºçš
æµè§åšæåŒïŒhttp://localhost:8000
ð¡ 䜿çšç€ºäŸ
åºç¡å¯¹è¯
ð€ äœ å¥œïŒäœ èœåä»ä¹ïŒ
ð€ æå¯ä»¥åž®æšïŒ
⢠æ¥è¯¢åå·¥åéšéšä¿¡æ¯
⢠äžäŒ åæçŽ¢ææ¡£
⢠æå»ºåæ¥è¯¢ç¥è¯åŸè°±
⢠è¿è¡æ°åŠè®¡ç®åç»è®¡åæ
⢠è·åæ¶éŽä¿¡æ¯åè¿è¡æ¥æè®¡ç®
⢠åèµ·HTTP请æ±åæ¥è¯¢å€©æ°
æ°æ®åºæ¥è¯¢
ð€ æ¥è¯¢éå®éšæå€å°åå·¥ïŒå¹³åèªèµæ¯å€å°ïŒ
ð€ [è°çš query_employees_by_department(department_id=2)]
[è°çš get_department_statistics()]
éå®éšå
±æ 15 ååå·¥ïŒå¹³åèªèµäžº 8,500 å
ã
ææ¡£äžäŒ äžæ£çŽ¢
ð€ åž®æäžäŒ è¿ä»œäº§å诎æä¹Š
ð€ [è°çš upload_document(file)]
ð€ æ£åšäžäŒ ææ¡£...
ð å·²åå²äžº 23 äžªææ¬å
ð§ æ£åšåæç¬¬ 1/5 äžªææ¬å...
ð§ æ£åšåæç¬¬ 2/5 äžªææ¬å...
â
ç¥è¯åŸè°±æå»ºå®æïŒ
ææ¡£äžäŒ æåïŒå·²æå 18 䞪å®äœå 25 æ¡å
³ç³»ã
ð€ è¿ä»œææ¡£éæå°çäž»èŠåèœæåªäºïŒ
ð€ [è°çš search_documents(query="äž»èŠåèœ")]
æ ¹æ®ææ¡£ïŒäž»èŠåèœå
æ¬ïŒ
1. æ°æ®ééäžååš
2. 宿¶çæ§äžåèŠ
3. æ°æ®åæäžå¯è§å
...
ç¥è¯åŸè°±æ¥è¯¢
ð€ æµªæœ®äºæŽ²ååªäºé¡¹ç®æå
³ç³»ïŒ
ð€ [è°çš query_entity(entity_name="æµªæœ®äºæŽ²")]
æµªæœ®äºæŽ²åšç¥è¯åŸè°±äžæä»¥äžå
³ç³»ïŒ
⢠åŒå â äºæŽ²æ°æ®æ²»çç³»ç»
⢠æäŸ â æ°æ®å¯è§åå¹³å°
⢠åºçšäº â éå·äº§äžæ
æ¥å¹³å°
...
ð€ æµªæœ®äºæŽ²åéå·éå¢ä¹éŽæä»ä¹èç³»ïŒ
ð€ [è°çš find_entity_path(source="æµªæœ®äºæŽ²", target="éå·éå¢")]
æŸå°å
³ç³»è·¯åŸïŒ
æµªæœ®äºæŽ² â åŒå â å³çæ¯æå¹³å° â åºçšäº â éå·éå¢
计ç®äžåæ
ð€ è®¡ç® (123 + 456) * 2 - 89
ð€ [è°çš calculate(expression="(123 + 456) * 2 - 89")]
计ç®ç»æïŒ1,069
ð€ åž®æåæäžäžè¿ç»æ°æ®çç»è®¡ç¹åŸïŒ[23, 45, 67, 89, 12, 34, 56, 78]
ð€ [è°çš statistics_analysis(data=[23,45,67,89,12,34,56,78])]
ç»è®¡åæç»æïŒ
⢠平ååŒïŒ50.5
⢠äžäœæ°ïŒ50.5
⢠æ åå·®ïŒ26.4
⢠æå°åŒïŒ12ïŒæå€§åŒïŒ89
ð 项ç®ç»æ
LLM_MCP_TOOLS/
âââ ð README.md # 项ç®è¯Žæææ¡£
âââ ð requirements.txt # PythonäŸèµå衚
âââ ð .env.example # ç¯å¢åé瀺äŸ
âââ ð .gitignore # Gitå¿œç¥æä»¶
â
âââ ð run.py # ç»äžå¯åšå
¥å£
âââ ð run_decoupled.py # è§£èŠæš¡åŒå¯åšïŒåæ¶å¯åšäž€æå¡ïŒ
âââ ð run_mcp_server.py # åç¬å¯åš MCP Server
â
âââ âïž config/ # é
眮暡å
â âââ __init__.py
â âââ settings.py # é
眮äžå¿ïŒæ°æ®åºãLLMã端å£çïŒ
â
âââ ð§ mcp_server/ # MCP Server (port 8001)
â âââ __init__.py
â âââ server.py # ð¯ å·¥å
·æ³šåäžå¿ (@mcp.tool())
â âââ prompts.py # æç€ºè¯æš¡æ¿
â âââ tools/ # å·¥å
·å®ç°
â âââ __init__.py
â âââ database_tools.py # æ°æ®åºå·¥å
·ïŒ6äžªåœæ°ïŒ
â âââ knowledge_tools.py # ç¥è¯åºå·¥å
·ïŒ3äžªåœæ°ïŒ
â âââ knowledge_graph_tools.py # ç¥è¯åŸè°±å·¥å
·ïŒ7äžªåœæ°ïŒ
â âââ calculation_tools.py # 计ç®å·¥å
·ïŒ3äžªåœæ°ïŒ
â âââ time_tools.py # æ¶éŽå·¥å
·ïŒ4äžªåœæ°ïŒ
â âââ api_tools.py # APIå·¥å
·ïŒ3äžªåœæ°ïŒ
â
âââ ð web_app/ # Web App (port 8000)
â âââ __init__.py
â âââ main.py # ð¯ FastAPIåºçš + WebSocket + LLM
â âââ mcp_client.py # ð¯ MCP ClientïŒHTTPéä¿¡ïŒ
â âââ static/ # åç«¯éææä»¶
â âââ index.html # 䞻页é¢
â âââ knowledge-graph.html # ç¥è¯åŸè°±å¯è§å
â âââ css/
â â âââ style.css # æ ·åŒæä»¶
â âââ js/
â âââ app.js # åºçšåå§å
â âââ websocket.js # WebSocketè¿æ¥ç®¡ç
â âââ chat.js # è倩åèœ
â âââ message-handler.js # æ¶æ¯å€çïŒå«è¿åºŠæŸç€ºïŒ
â âââ file-upload.js # æä»¶äžäŒ
â âââ knowledge-graph.js # ç¥è¯åŸè°±å¯è§å
â âââ utils.js # å·¥å
·åœæ°
â
âââ ð docs/ # ææ¡£ç®åœ
â âââ ç¥è¯åŸè°±ææ¯æ·±åºŠè§£æ.md
â âââ ç¥è¯åŸè°±åºçšè¯Žæ.md
â âââ ææ¬åå€çè¿åºŠåèœè¯Žæ.md
â âââ MCP_API_宿Žå¯¹ç
§è¡š.md
â
âââ ð€ uploads/ # ææ¡£äžäŒ ç®åœïŒ.gitignoreïŒ
âââ ðŸ chroma_db/ # ChromaDBæ°æ®ç®åœïŒ.gitignoreïŒ
âââ ð§ knowledge_graph_data/ # ç¥è¯åŸè°±æ°æ®ïŒ.gitignoreïŒ
ð§ åŒåæå
æ·»å æ°å·¥å ·
åªéåš mcp_server/server.py äžæ·»å ïŒ
@mcp.tool()
def my_new_tool(param1: str, param2: int = 10) -> Dict[str, Any]:
"""
å·¥å
·æè¿°ïŒäŒèªåšäœäžºå·¥å
·ç诎æïŒ
Args:
param1: åæ°1ç诎æ
param2: åæ°2ç诎æïŒé»è®€åŒ10
Returns:
è¿ååŒè¯Žæ
"""
# å®ç°äœ çé»èŸ
result = do_something(param1, param2)
return {
"success": True,
"data": result,
"message": "æ§è¡æå"
}
éå¯ MCP ServerïŒWeb App äŒèªåšè¯å«æ°å·¥å
·ïŒâš
æ éä¿®æ¹ main.pyãå·¥å
·å衚æå端代ç ã
å·¥å ·åŒåæäœ³å®è·µ
- æž æ°çææ¡£å笊䞲ïŒäŒäœäžºå·¥å ·æè¿°äŒ éç»å€§æš¡å
- ç±»åæ³šè§£ïŒåž®å©èªåšçæå·¥å ·åæ°schema
- ç»äžçè¿åæ ŒåŒïŒå»ºè®®å
å«
successãdataãmessageåæ®µ - é误å€çïŒæè·åŒåžžå¹¶è¿åå奜çé误信æ¯
æ¬å°åŒå
# å®è£
åŒåäŸèµ
pip install -r requirements-dev.txt
# è¿è¡æµè¯
pytest tests/
# ä»£ç æ ŒåŒå
black .
isort .
# ç±»åæ£æ¥
mypy .
ð ææ¡£
- ç¥è¯åŸè°±ææ¯æ·±åºŠè§£æ
- ç¥è¯åŸè°±åºçšè¯Žæ
- ææ¬åå€çè¿åºŠåèœè¯Žæ
- MCP API宿Žå¯¹ç §è¡š
å€éšèµæº
â åžžè§é®é¢
Q: ChromaDB æ¥é "Insert of existing embedding ID"ïŒ
A: è¿æ¯éå€äžäŒ ææ¡£å¯ŒèŽçãå·²åšæ°çæ¬äžä¿®å€ïŒäœ¿çš upsert æ¿ä»£ addã
Q: 端å£è¢«å çšæä¹åïŒ
A: ä¿®æ¹ config/settings.py äžç端å£é
眮ïŒ
class WebConfig:
PORT = 8000 # æ¹æå
¶ä»ç«¯å£åŠ 8080
class MCPServerConfig:
PORT = 8001 # æ¹æå
¶ä»ç«¯å£åŠ 8081
Q: ç¥è¯åŸè°±æå»ºåŸæ ¢ïŒ
A: è¿æ¯æ£åžžçïŒå 䞺éèŠè°çšå€§æš¡åAPIè¿è¡å®äœæœåãææ¡£è¶é¿ïŒéèŠçæ¶éŽè¶é¿ãæ°çæ¬å·²æ¯æå®æ¶è¿åºŠæŸç€ºã
Q: åŠäœäžäœ¿çšæ°æ®åºå·¥å ·ïŒ
A: æ°æ®åºå·¥å
·æ¯å¯éçãåŠæäžéèŠïŒå¯ä»¥åš mcp_server/server.py äžæ³šéæçžå
³å·¥å
·ç泚åå³å¯ã
Q: æ¯æåªäºå€§æš¡åïŒ
A: çè®ºäžæ¯æææå
Œå®¹ OpenAI API æ ŒåŒç倧暡åãåªéä¿®æ¹ config/settings.py äžç LLMConfigïŒ
class LLMConfig:
API_KEY = "your_api_key"
API_BASE = "https://api.openai.com/v1" # æå
¶ä»ç«¯ç¹
MODEL_NAME = "gpt-4" # æå
¶ä»æš¡å
ð€ åäžèŽ¡ç®
æä»¬æ¬¢è¿ææåœ¢åŒç莡ç®ïŒæ è®ºæ¯æ°åèœãBugä¿®å€ãææ¡£æ¹è¿è¿æ¯é®é¢åéŠã
èŽ¡ç®æ¹åŒ
- Fork æ¬ä»åº
- åå»ºç¹æ§åæ¯ (
git checkout -b feature/AmazingFeature) - æäº€æŽæ¹ (
git commit -m 'Add some AmazingFeature') - æšéå°åæ¯ (
git push origin feature/AmazingFeature) - åŒå¯ Pull Request
åŒåè§è
- éµåŸª PEP 8 代ç è§è
- æ·»å å¿ èŠç泚éåææ¡£
- çŒååå æµè¯
- ç¡®ä¿æææµè¯éè¿
ð åŒæºåè®®
æ¬é¡¹ç®éçš MIT License åŒæºåè®®ã
ð èŽè°¢
- FastMCP - äŒç§ç MCP å®ç°æ¡æ¶
- FastAPI - ç°ä»£åç Python Web æ¡æ¶
- ChromaDB - ç®åæçšçåéæ°æ®åº
- NetworkX - 区倧çåŸåæåº
- éä¹åé® - é¿éäºå€§æš¡åæå¡
ð§ èç³»æ¹åŒ
- GitHub: @houmingya
- Issues: 项ç®é®é¢åéŠ
åŠæè¿äžªé¡¹ç®å¯¹äœ æåž®å©ïŒè¯·ç»äžª âïž Star æ¯æäžäžïŒ
Made with â€ïž by houmingya
