Mini Agent MCP
Mini Agent MCP is an intelligent agent server combining built-in utility tools, web search capabilities, and a ReAct-based autonomous agent to complete complex multi-step tasks. It supports client-side LLM reasoning via MCP Sampling or direct OpenAI-compatible API calls.
ð€ ReAct Autonomous Agent (run_agent)
Plans and executes multi-step tasks using a Thought â Action â Observation loop
Chains up to 8 tool calls, combining any available tools automatically
Falls back to a rule-based engine if no LLM is configured
ð§® Built-in Utility Tools
Calculator: Evaluate mathematical expressions (arithmetic, trig, logarithms, constants like pi/e)
Text Analysis (
text_stats): Get character/word/sentence/paragraph counts, average word length, and most frequent wordsText Transform (
text_transform): Apply uppercase, lowercase, titlecase, reverse, trim, sort lines, remove duplicates, count/replace substringsUnit Conversion (
unit_convert): Convert length, weight, temperature, and data storage unitsDate & Time (
datetime_info): Get current date/time (with timezone support), format dates, or calculate differences between datesRandom Generation (
random_gen): Generate random integers, UUID v4s, custom passwords, or pick/shuffle items from a list
ð AnySearch Web Tools
Search (
anysearch_search): General or vertical web searches (finance, academic, legal, health, etc.)Batch Search (
anysearch_batch_search): Run up to 5 parallel search queries in a single callURL Extraction (
anysearch_extract): Fetch and convert any webpage's content to clean Markdown (up to 50,000 characters)Domain Discovery (
anysearch_get_sub_domains): Discover available vertical search sub-domains and required parameters before performing specialized searches
Allows the MCP server to call an OpenAI-compatible API for LLM reasoning, enabling the agent to perform complex multi-step tasks using either client-side sampling or direct HTTP with OpenAI models.
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@Mini Agent MCPSearch for the area of Canada and convert to square kilometers."
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Mini Agent MCP
äžäžªåºäº FastMCP + OpenAI SDK ç MCP æºèœä»£çæå¡åš
éæ ReAct AgentãDAG å·¥äœæµã深床ç ç©¶ãæä¹ åè®°å¿ãæèœåŠä¹ ãAnySearch æ£çŽ¢çèœå
åäºè¿å¶å³å¯æç®¡ / æ¬å°éšçœ² / åµå ¥ä»»æ MCP 客æ·ç«¯
äžãè¿æ¯ä»ä¹
mini-agent-mcp æ¯äžäžªéµåŸª Model Context Protocol (MCP) ç stdio / SSE æå¡åšïŒ
对å€åªæŽé² 1 䞪 MCP å·¥å ·ïŒ
run_agentââçšäºæ²¡æå Agent çåºçšæ³šå ¥äžäžª"åæºèœäœ"å¯¹å æç®¡äžäžª ReAct æšç代çïŒèªäž»è°çš 14 䞪å éšå·¥å ·ïŒ6 䞪åºç¡å·¥å · + 4 䞪 AnySearch å·¥å · + é«çº§ pipeline çïŒå®æä»»å¡
å 眮 DAG å·¥äœæµäžå€é¶æ®µæ·±åºŠç 究管线
éè¿ ToolManager ç»äžç®¡çè¶ æ¶ãå¹¶åãéè¯ãéšçŠ
éè¿
.memory/äž.skills/å®ç°æ¬å°æä¹ åè®°å¿åæèœåŠä¹
æ¯æäžç§ LLM éä¿¡æš¡åŒïŒèªåšçº§è fallbackïŒïŒ
MCP Sampling â 客æ·ç«¯æš¡åïŒé¶é 眮
Direct HTTP â éè¿ OpenAI SDK çŽè¿ä»»æå Œå®¹ç«¯ç¹
Rule-based â åºäºæ£åçæš¡åŒå¹é å åº
Related MCP server: mcp-toolkit
äºãæ žå¿ç¹æ§
æš¡å | èœå |
ð§® åºç¡å·¥å · | å®å šæ°åŠè®¡ç®ãææ¬ç»è®¡ãææ¬èœ¬æ¢ãåäœæ¢ç®ãæ¥ææ¶éŽãéæºçæ |
ð€ ReAct Agent | åç Function Calling 倿¥æšçïŒèªåšå¹é å岿èœïŒHook æ³šå ¥ |
ð DAG å·¥äœæµ | æåæ ç¯åŸçŒæïŒå¹¶è¡æ§è¡æ äŸèµèç¹ïŒèªåšæ³šå ¥äžæžžç»æ |
ð æ·±åºŠç ç©¶ | æè§£åé®é¢ â å¹¶è¡æ£çŽ¢ â ç»Œåæ¥åïŒäžé¶æ®µç®¡çº¿ |
ðŸ è®°å¿ç³»ç» | 4 ç±»æ çŸåæä¹ è®°å¿ïŒæè®¿é®é¢æ¬¡ LRU æ£çŽ¢ |
ð¯ æèœç³»ç» | 宿任å¡åæåå¯å€çšæèœïŒæ°ä»»å¡èªåšå¹é |
ð AnySearch éæ | èªåšåç°å¹¶æ¥å ¥æ£çŽ¢å·¥å ·ïŒä» äŸ Agent å éšè°çš |
ð¡ïž å·¥å ·éšçŠ | èŸå ¥é¿åºŠäžéãé误åç±»ãæºèœéè¯ãè¶ æ¶æ§å¶ |
ð äžæš¡åŒ LLM | Sampling â HTTP â Rule-based éæçº§è fallback |
ðª Hooks æ©å± | åš LLM è°çšååæ³šå ¥èªå®ä¹é»èŸïŒYao æš¡åŒïŒ |
äžãæ¶ææ»è§
âââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ
â MCP 客æ·ç«¯ (Claude / ZCode) â
â tools/list åªè§ 1 䞪工å
·: run_agent â
â tools/call ä»
å¯è° run_agent â
âââââââââââââââââââââââââââââââ¬ââââââââââââââââââââââââââââââââââââââââ
â run_agent(task)
âââââââââââââââââââââââââââââââŒââââââââââââââââââââââââââââââââââââââââ
â FastMCP Server â
â run_agent â å¯äžå¯¹å€ç MCP å·¥å
· â
âââââââââââââââââââââââââââââââ¬ââââââââââââââââââââââââââââââââââââââââ
â
âââââââââââââââââââââââââââââââŒââââââââââââââââââââââââââââââââââââââââ
â ToolManager (singleton) â
â è¶
æ¶ / å¹¶åäžé / æºèœéè¯ / èŸå
¥éšçŠ / è°çšåå² â
â 14 䞪å
éšå·¥å
·ïŒå€é¢çäžè§ïŒ â
âââââââââââââââââââââââââââââââ¬ââââââââââââââââââââââââââââââââââââââââ
â
âââââââââââââââââââââââŒâââââââââââââââââââââââ
â â â
⌠⌠âŒ
6 䞪æ¬å°å·¥å
· run_agentïŒå¯äžå¯¹å€å·¥å
·ïŒ .memory / .skills
(calculator, ... + å
éšé«çº§ pipeline (æä¹
å)
ä»
Agent å
éšäœ¿çš)
â
âŒ
âââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ
â ReAct Agent (src/agent/react.ts) â
â â
â LLM âââ CreateHook ââ messages âââ LLM âââ NextHook â ååºæ ¡éª â
â â â
â â tool_calls â
â ⌠â
â buildToolList() = 6 æ¬å°å·¥å
· + AnySearch 4 䞪å
éšå·¥å
· â
â (AnySearch æå 蜜ïŒéŠæ¬¡ run_agent è°çšæ¶åç°å¹¶çŒå) â
â â
â âââââââââââââââââââââââââââ âââââââââââââââââââââââââââ â
â â LLM æš¡åŒ (äŒå
级) â â Fallback éŸ â â
â â 1. MCP Sampling â â â 倱莥 â é级å°äžäžæš¡åŒ â â
â â 2. Direct HTTP â â â â
â â 3. Rule-based â â â â
â âââââââââââââââââââââââââââ âââââââââââââââââââââââââââ â
âââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ
â
âŒ
âââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ
â æä¹
åå± (æ¬å° JSON) â
â .memory/memories.json ââ 4 ç±»è®°å¿ (fact/preference/task/conv) â
â .skills/skills.json ââ æ çŸè¯åæèœåº â
âââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ
**AnySearch æå 蜜æ¶åº**ïŒ
1. æå¡åšå¯åš â ä»
泚å `run_agent` å° FastMCP + 6 䞪æ¬å°å·¥å
·å°å
éš ToolManager
2. 客æ·ç«¯è°çš `run_agent` â Agent è§Šå `ensureAnySearchTools()`
3. éŠæ¬¡ïŒHTTP è¿æ¥å° `api.anysearch.com/mcp` åç°å·¥å
·ïŒçŒå 1 å°æ¶
4. åç»ïŒåœäžçŒåïŒé€é TTL è¿ææè°çš `resetAnySearchCache()`ïŒåãå¿«éäžæ
4.1 MCP 客æ·ç«¯é 眮
stdio æš¡åŒïŒæåžžçšïŒâ å€å¶å°å®¢æ·ç«¯ç MCP é 眮æä»¶äžïŒ
{
"mcpServers": {
"mini-agent-mcp": {
"type": "stdio",
"command": "npx",
"args": ["-y", "mini-agent-mcp"],
"env": {
"ANYSEARCH_API_KEY": "",
"LLM_API_KEY": "sk-your-key",
"LLM_BASE_URL": "https://api.longcat.chat/openai/v1",
"LLM_MODEL": "LongCat-2.0",
"LLM_MAX_TOKENS": "4096"
}
}
}
}ä¹å¯çŽæ¥äœ¿çš
node dist/index.jså¯åšæ¬å°çŒè¯äº§ç©ïŒè§ §4.3ïŒã
SSE æš¡åŒïŒå¯éïŒâ éè¿ node dist/index.js --sse å¯çš httpStream äŒ èŸã
4.2 .env é
眮ïŒfallbackïŒ
æå¡åšå¯å𿶿以äžé¡ºåºæ¥æŸ .envïŒç¬¬äžäžªååšå³çæïŒïŒ
process.cwd()/.envâ å¯åšæ¶çå·¥äœç®åœ<dist äžäžçº§>/.envâ å³npm installåçé¡¹ç®æ ¹ç®åœïŒdist/index.jså¯åšåºæ¯ïŒ<dist äžäž€çº§>/.envâ é¡¹ç®æ ¹ç®åœçç¶ç®åœ
â ïž éè¿
npx -y mini-agent-mcpå šå±æèµ·æ¶ïŒprocess.cwd()åå³äº MCP 客æ·ç«¯çå·¥äœç®åœïŒäžäžå®çäºé¡¹ç®æ ¹ãæšèåæ¶åš MCP é 眮æä»¶çenvåäžæŸåŒæ³šå ¥åéïŒè§ §4.1ïŒïŒä»¥é¿å æ¥æŸè·¯åŸäžäžèŽåžŠæ¥çé 眮æŒç§»ã
cp .env.example .env# AnySearch API KeyïŒå¯é â äžå¡«åå¿å访é®ïŒæèŸäœéçéå¶ïŒ
ANYSEARCH_API_KEY=
# LLM çŽæ¥è°çšé
眮ïŒä»
Direct HTTP æš¡åŒéèŠïŒ
LLM_API_KEY=
LLM_BASE_URL=https://api.longcat.chat/openai/v1
LLM_MODEL=LongCat-2.0
LLM_MAX_TOKENS=4096
# å¯éïŒå€äŸåºå忢ïŒè§ §9.2ïŒ
# LLM_PROVIDER=openai
# LLM_PROVIDERS_PATH=/abs/path/to/providers.json
# Agent è¡äžºè°äŒ
AGENT_MAX_TURNS=5 # ReAct æšçæ¥æ°äžéïŒ1-50ïŒ
AGENT_TOOL_RETRY=1 # å·¥å
·å€±èŽ¥éè¯æ¬¡æ°ïŒ0-3ïŒ
# ToolManager è°äŒ
TOOL_MAX_CONCURRENT=10 # å¹¶åæ§è¡äžé
TOOL_RETRY_COUNT=2 # ç¬æ¶é误éè¯ïŒ0-5ïŒ4.3 æ¬å°åŒå
git clone https://github.com/Microbiosis/mini-agent-mcp.git
cd mini-agent-mcp
npm install
npm run build # tsc çŒè¯å° dist/
node dist/index.js # å¯åš MCP æå¡åšïŒstdioïŒ
node dist/index.js --test # èªæ£æš¡åŒïŒè°çšå
šéš 14 䞪工å
·
node dist/index.js --sse # å¯çš HTTP Stream äŒ èŸ
--testæš¡åŒè¿è¡å®æåäŒprocess.exit(0)ïŒéåå CI èªæ£ã
4.4 éªè¯å®è£
echo '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2024-11-05","capabilities":{},"clientInfo":{"name":"probe","version":"1"}}}' \
| npx mini-agent-mcpæ£åžžæ åµäžäŒè¿å 14 äžªå·¥å ·ç schemaã
äºãMCP å·¥å ·åè
5.1 å¯äžå¯¹å€å·¥å ·ïŒå€éš Agent å¯äžå¯è°ïŒ
å·¥å · | åæ° | çšé | è¶ æ¶ |
|
| æä»»å¡å§æŽŸç»å
眮 ReAct AgentïŒAgent èªåšéæ©å¹¶è°çš 14 䞪å
éšå·¥å
·å®æã | 120s |
run_agent è¿åç»æïŒ
Task: è®¡ç® sqrt(15) + 8
Mode: LLM-powered (HTTP)
Steps: 2
--- Reasoning Trace ---
[Step 1]
Thought: ...
Action: calculator
Observation: Expression: sqrt(15) + 8
Result: 11.872983346207417
[Step 2]
Thought: ...
Final Answer: 11.87
--- Final Answer ---
11.875.2 å éšå·¥å ·ïŒä» Agent å¯è§ïŒå€éš tools/list äžå¯è§ïŒ
äžé¢ 14 䞪工å
·äžéè¿ MCP tools/list æŽé²ââåªèœç± run_agent å
ç ReAct 埪ç¯èªåšè°çšã客æ·ç«¯ Agent éè¿ run_agent(task) å§æŽŸä»»å¡ïŒAgent åšå
éšæ ¹æ®éèŠæéå¹¶æ§è¡è¿äºå·¥å
·ã
åºç¡å·¥å ·ïŒ6 䞪 â 忥ãç¡®å®æ§ïŒ
å éšå·¥å · | åæ° | çšé |
|
| å®å
šæ°åŠæ±åŒïŒéåœäžéè§£æåšïŒæ |
|
| å笊æ°ãè¯æ°ã奿°ã段æ°ãå¹³åè¯é¿ãTop 5 é«é¢è¯ |
|
| uppercase/lowercase/titlecase/reverse/trim/remove_duplicates/sort_lines/count_substring/replace |
|
| é¿åºŠ/éé/枩床/æ°æ®åäœæ¢ç® |
|
| åœåæ¶éŽãæ ŒåŒèœ¬æ¢ãæ¥æå·® |
|
| éæºæŽæ°/UUID/å¯ç /éæ ·/æŽç |
é«çº§ pipelineïŒ3 䞪ïŒ
å éšå·¥å · | çšé |
| DAG å·¥äœæµçŒæïŒå€äžª Agent 任塿äŸèµæ§è¡ïŒ |
| äžé¶æ®µæ·±åºŠç ç©¶ïŒæè§£ â æ£çŽ¢ â 绌å |
(å€å) | å€é¶æ®µç ç©¶ä»»å¡çäž²èå ¥å£ |
è®°å¿å·¥å
·ïŒ3 䞪 â æä¹
åå° .memory/memories.jsonïŒ
å éšå·¥å · | çšé |
| ååšäžæ¡è®°å¿ïŒfact/preference/task/conversationïŒ |
| ææ çŸæ£çŽ¢ Top 5 è®°å¿ |
| è¿åè®°å¿ç»è®¡ |
æèœå·¥å
·ïŒ2 䞪 â æä¹
åå° .skills/skills.jsonïŒ
å éšå·¥å · | çšé |
| æåäžäžªå¯å€çšæèœ |
| ååºæææèœ |
AnySearch å·¥å ·ïŒ4 䞪 â æå 蜜ïŒ
anysearch_search / anysearch_batch_search / anysearch_extract / anysearch_get_sub_domainsïŒè¯Šè§ §6ïŒ
ð¡ 讟计æåŸïŒæ¬æå¡çæ žå¿å®äœæ¯äžºæ²¡æåæºèœäœç Agent åºçšæ³šå ¥"åæºèœäœ"èœåãå€éšå·¥å ·éä¿ææç®ïŒä»
run_agentïŒïŒå šéšå éšå·¥å ·ç± Agent èªæ²»è°åºŠïŒé¿å æŽé²è¿å€å·¥å ·é¢å¹²æ°äž» Agent çéæ©ã
å ãAnySearch å éšå·¥å ·
æå 蜜ïŒAnySearch å·¥å
·äžåšå¯åšæ¶è¿æ¥ïŒèæ¯çå°éŠæ¬¡è°çš run_agentïŒæ deep_researchïŒæ¶ïŒç± Agent éè¿ ensureAnySearchTools() è§Šååç° + 泚åãè¿æ ·ïŒ
æå¡åšå·å¯åšäžå AnySearch çœç»åœ±å
äžäœ¿çš Agent åèœç客æ·ç«¯å®å šè·³è¿ AnySearch
å·¥å ·å衚çŒå 1 å°æ¶ïŒå¯çš
ANYSEARCH_CACHE_TTL_MSèŠçïŒ
åç°åäŒæ³šåå°å éš ToolManager çå·¥å ·ïŒ
å éšåç§° | åèœ |
| éçšæçŽ¢ïŒæ¯æéèãåŠæ¯ãæ³åŸçåçŽé¢åïŒ |
| 1-5 䞪ç¬ç«æ¥è¯¢çå¹¶è¡æçŽ¢ |
| URL çœé¡µå 容æåïŒæå€ 50,000 å笊 MarkdownïŒ |
| æ¥è¯¢åçŽé¢åç®åœ |
â ïž è¿äºå·¥å ·ä» 泚åå°å éš ToolManagerïŒäŸ ReAct Agent åšæšç埪ç¯äžèªäž»è°çšïŒäž éè¿ MCP
tools/listæŽé²ç»å€éšå®¢æ·ç«¯ââMCPtools/listå§ç»åªè¿å 1 äžªå·¥å ·ïŒrun_agentã
å¿åå¯çšïŒäžè®Ÿ ANYSEARCH_API_KEY ä¹èœè¿æ¥ïŒåªæ¯æèŸäœçéçéå¶ïŒé«çº§äœ¿çšåºæ¯å¯å¡« Key æåé
é¢ã
çŒåçç¥ïŒ
é»è®€ TTLïŒ1 å°æ¶ïŒç¯å¢åé
ANYSEARCH_CACHE_TTL_MSïŒè®Ÿäžº0æ¯æ¬¡è¿æéœéåç°ïŒç¬æ¶å€±èŽ¥æ¶ïŒä¿çæ§çŒåïŒserving stale cacheïŒââ å¯çšå·¥å ·äŒå äºæ å·¥å ·
æåšå·æ°ïŒè°çš
resetAnySearchCache()ïŒæ¥èªmini-agent-mcp/agentæå éš APIïŒ
容éïŒMCPRuntime ç¶ææºïŒidle â connecting â connected â degraded/error/disabledïŒèªåšå€çç¬æ¶é误ïŒéè¯ïŒå硬é误ïŒ401/403/DNS â çŠçšïŒïŒAnySearch äžå¯èŸŸäžäŒé»å¡ Agent å¯åšã
äžãLLM äžæš¡åŒ + Fallback
run_agent å¯åšæ¶æäŒå
çº§éæ© LLM è°çšæ¹åŒïŒå€±èŽ¥æ¶èªåšé级ïŒ
âââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ
â runAgent(task) â
â â â
â getLLMMode() â
â ââ⺠"sampling" (MCP 客æ·ç«¯æ¯ææ¶) â
â â ââ æå â è¿å â
â â ââ 倱莥 â æ£æ¥ Direct HTTP é
眮 â
â ââ⺠"http" (è®Ÿçœ®äº LLM_API_KEY + BASE_URL + MODEL) â
â â ââ æå â è¿å â
â â ââ 倱莥 â Fallback â
â ââ⺠"none" (Rule-based å
åº) â
â ââ æ°žè¿å¯æ§è¡ â
âââââââââââââââââââââââââââââââââââââââââââââââââââââââââââæš¡åŒ | è§Šåæ¡ä»¶ | äŒç¹ | éå¶ |
MCP Sampling | MCP 客æ·ç«¯æ³šåäº | é¶é 眮ã客æ·ç«¯ LLM | äŸèµå®¢æ·ç«¯æ¯æ |
Direct HTTP | è®Ÿçœ®äº | äžå®¢æ·ç«¯è§£èŠãå¯æç®¡ | éèŠ API Key |
Rule-based | äžè¿°éœå€±èŽ¥ / æŸåŒ | æ LLM ä¹èœè· | ä» é §5.1 åºç¡å·¥å ·èœçŽæ¥èŠççä»»å¡ïŒæ°åŠãåäœæ¢ãæ¶éŽãå¯ç ãUUIDãææ¬ç»è®¡ãæ¥æå·®ïŒ |
å ³é® APIïŒ
getLLMMode(): 'sampling' | 'http' | 'none'â æ£æ¥åœåå¯çšæš¡åŒgetLLMConfig()â è¿å Direct HTTP é 眮ïŒåŠæïŒ
å «ãHooks ç³»ç»ïŒYao æš¡åŒïŒ
src/agent/react.ts æŽé²äž€äžª Hook ç¹ïŒå¯åšäžä¿®æ¹ Agent å
æ žçåæäžæ³šå
¥èªå®ä¹è¡äžºïŒ
import { addCreateHook, addNextHook, clearHooks } from "mini-agent-mcp";
addCreateHook(async (ctx, messages) => {
// LLM è°çšåïŒå¯æ³šå
¥ / ä¿®æ¹ / åæ¶æ¶æ¯
// ctx: { task, step, maxSteps }
// è¿å null â åæ¶æ¬æ¬¡ LLM è°çš
// è¿å messages æ°ç» â æ¿æ¢äžºæ°æ¶æ¯
if (ctx.step === 0) {
messages.push({ role: "user", content: "[System] 请䜿çšäžæåçã" });
}
return messages;
});
addNextHook(async (ctx, response) => {
// LLM ååºåïŒå¯æ ¡éª / æŠæª
// è¿å "stop" â ç«å³ç»æ¢ Agent
// è¿å "continue" æ null â æ£åžžç»§ç»
if (response.content?.includes("ERROR")) return "stop";
return null;
});
// æž
ç©ºææ Hook
clearHooks();å žåçšéïŒ
æ³šå ¥ç³»ç»çº§æç€ºè¯ / å®å šçºŠæ
æ·»å 审计æ¥å¿ãè°çšç»è®¡
éå¶å·¥å ·è°çšèåŽïŒå眮éšçŠïŒ
åšååºåºç°å±é©æš¡åŒæ¶çާæ¥åæ¢
ä¹ãæä¹ åå±
9.1 MemoryïŒ.memory/memories.jsonïŒ
interface Memory {
id: string; // mem_<timestamp>_<rand>
type: "fact" | "preference" | "task" | "conversation";
content: string;
tags: string[]; // çšäºæ£çŽ¢
timestamp: number; // å建æ¶éŽïŒepoch msïŒ
accessCount: number; // recall æ¶éå¢ïŒåœ±åæåº
}æ£çŽ¢ç®æ³ïŒ
æ çŸå®å šå¹é â çŽæ¥å¬å
æ
accessCount + recencyæåºé»è®€è¿å Top 5ïŒ
recall(tags, limit=5)ïŒ
9.2 SkillïŒ.skills/skills.jsonïŒ
interface Skill {
id: string; // skill_<timestamp>
name: string;
description: string;
exampleTask: string;
steps: string[]; // æ¥éª€æè¿°ïŒæ³šå
¥å°æ¶æ¯åå²ïŒ
tags: string[]; // å¹é
å
³é®è¯
useCount: number; // 环计被èªåšåºç𿬡æ°
createdAt: number; // éŠæ¬¡å建æ¶éŽïŒæ°žäžæŽæ°ïŒ
lastUsedAt?: number; // æè¿äžæ¬¡è¢« matchSkill å¹é
å¹¶ useSkill() çæ¶éŽ
lastUpdatedAt?: number; // æè¿äžæ¬¡ extractSkill() èŠçå
å®¹çæ¶éŽ
}å¹é
è¯åïŒmatchSkill(task)ïŒïŒ
æ¯äžªå¹é tagïŒ
+10æ¯äžª step å 20 å笊åºç°åš task äžïŒ
+5ä» è¿å
score > 0çæäœ³å¹é
èªåšåºçšïŒæ¯æ¬¡ runAgent å¯åšåéœäŒè°çš matchSkill()ïŒè¥åœäžåææ¥éª€äœäžº hint 泚å
¥ LLM æ¶æ¯ïŒå¹¶ useSkill() å¢å è®¡æ° â è¿å°±æ¯"èªæåŠä¹ "çæºå¶ã
åãDAG å·¥äœæµ
run_workflow æ¥åäžäžª JSON æ°ç»ïŒææåæ ç¯åŸæ§è¡ïŒ
[
{"id": "fetch", "label": "æå", "task": "çš search å·¥å
·æ¥è¯¢ MCP åè®®", "timeout": 60},
{"id": "sum1", "label": "æèŠ1", "task": "æäžé¢çå
å®¹ç¿»è¯æäžæ", "dependsOn": ["fetch"], "timeout": 30},
{"id": "sum2", "label": "æèŠ2", "task": "æå 3 䞪å
³é®ç¹", "dependsOn": ["fetch"], "timeout": 30},
{"id": "final", "label": "æ±æ»", "task": "å并䞀䞪æèŠäžºæç»æ¥å", "dependsOn": ["sum1", "sum2"]}
]æ§è¡ç¹æ§ïŒ
å¹¶è¡æ§è¡ïŒæ äŸèµå ³ç³»ïŒæäŸèµå·²å®æçïŒçæ¥éª€äŒåæ¶å¯åšïŒ
Promise.allïŒäŸèµæ³šå ¥ïŒ
buildStepTask()æäžæžžæ¥éª€çresult.answeræŒå°äžæžžä»»å¡æ«å°Ÿç¯æ£æµïŒDFS æ£æµåŸªç¯äŸèµïŒæåºæç¡®é误
æ»éå€çïŒè¥æ²¡æ ready æ¥éª€äœæªå šéšå®æïŒå©äœçæ 记䞺 blocked
è¶ æ¶ïŒæ¯æ¥ç¬ç«è¶ æ¶ïŒç§ïŒïŒé»è®€ 60
è¿åç»æïŒ
{
success: boolean,
totalDurationMs: number,
steps: [{ id, label, result, error?, durationMs }]
}åäžã深床ç ç©¶ïŒdeep_researchïŒ
äžé¶æ®µç®¡çº¿ïŒ5 åéè¶ æ¶ïŒ
âââââââââââââââââ âââââââââââââââââ âââââââââââââââââ
â 1. æè§£ â ââ⺠â 2. æ£çŽ¢ â ââ⺠â 3. 绌å â
â â â â â â
â LLM æé®é¢ â â æ¯äžªåé®é¢ â â LLM æ¶å°ææ â
â ææ 3-5 䞪 â â è§Šå run_agentâ â findings + â
â åé®é¢ â â èªåšè° search â â åé®é¢ïŒçæ â
â (fenced code) â â æ¶é findings â â Markdown æ¥å â
âââââââââââââââââ âââââââââââââââââ âââââââââââââââââparseSubQuestions() 容éïŒ
äŒå è§£æ fenced code blockïŒ
``` ... ```ïŒé级å°è¡æ«æïŒåªæ¥å
"- "åŒå€Žäž â¥12 å笊çè¡é»è®€æå€ 5 䞪åé®é¢
è§£æå€±èŽ¥ â fallback 䞺åé®é¢
[åé®é¢]
è¿åç»æå
å« subQuestionsãtotalStepsãdurationMs å宿Žç Markdown æ¥åïŒæ§è¡æèŠ + å
³é®åç° + ç»è®ºïŒã
åäºãé 眮åè
12.1 å šéšç¯å¢åé
åé | å¿ é | é»è®€ | çšé |
| è§æš¡åŒ | â | Direct HTTP æš¡åŒç API KeyïŒè£ž KeyïŒäžåžŠ |
| è§æš¡åŒ | â | OpenAI å
Œå®¹ç«¯ç¹ïŒéå« |
| è§æš¡åŒ | â | æš¡åå |
| åŠ |
| 忬¡çæäžé |
| åŠ |
| ä» |
| åŠ | â | åœåäŸåºåé 眮æä»¶è·¯åŸ |
| åŠ |
| ReAct æšçæ¥æ°äžéïŒ1-50ïŒ |
| åŠ |
| å·¥å ·å€±èŽ¥éè¯ïŒ0-3ïŒ |
| åŠ |
| ToolManager å¹¶åäžé |
| åŠ |
| ç¬æ¶é误éè¯ïŒ0-5ïŒ |
| åŠ | å¿å | AnySearch æåé é¢ |
| åŠ |
| AnySearch å·¥å
·åç°çŒå TTLïŒæ¯«ç§ïŒ |
12.2 å€äŸåºåé
眮ïŒproviders.jsonïŒ
{
"openai": {
"apiKey": "sk-...",
"baseUrl": "https://api.openai.com/v1",
"model": "gpt-4o-mini"
},
"deepseek": {
"apiKey": "sk-...",
"baseUrl": "https://api.deepseek.com/v1",
"model": "deepseek-chat"
}
}å¯åšæ¶è®Ÿçœ® LLM_PROVIDERS_PATH=/path/to/providers.json + LLM_PROVIDER=openaiã
â ïž å®å šæç€ºïŒ
providers.json嫿æ API KeyïŒè¯·å¡å¿ ïŒ
å å ¥
.gitignoreïŒäžèŠæäº€å°ä»åºæä»¶æé讟䞺
chmod 600ïŒLinux/macOSïŒåš CI/CD äžéè¿å¯é¥ç®¡çæå¡æ³šå ¥ïŒé¿å 硬çŒç
æšèäŒå 䜿çš
.env+ ç¯å¢åéæ¹åŒïŒÂ§4.2ïŒïŒå€äŸåºåé çœ®ä» åšéèŠè¿è¡æ¶åæ¢æš¡åæ¶äœ¿çš
12.3 å 眮äŸåºååè
äŸåºå |
|
|
LongCat |
|
|
OpenAI |
|
|
DeepSeek |
|
|
Moonshot (Kimi) |
|
|
SenseNova |
|
|
Ollama (æ¬å°) |
|
|
åäžã项ç®ç»æ
mini-agent-mcp/
âââ LICENSE # Apache-2.0
âââ README.md # æ¬æä»¶
âââ .env.example # ç¯å¢åéæš¡æ¿
âââ package.json
âââ tsconfig.json
âââ server.json # MCP Registry å
æ°æ®
âââ assets/icon.png # ååºåŸæ
âââ scripts/ # 14 䞪ç¬ç«æµè¯èæ¬
â âââ test-tools-list.mjs # éè¿ JSON-RPC æ¢æµ tools/list
â âââ test-agent.mjs # ReAct (rule + LLM) åæš¡åŒ
â âââ test-workflow.mjs # DAG + deep_research
â âââ test-deep-research*.mjs # 深床ç ç©¶åäœ
â âââ test-memory-skill.mjs # æä¹
åå± CRUD
â âââ test-anysearch*.mjs # AnySearch éæ
â âââ test-dag-buildStepTask.mjs # çº¯åœæ°åå
æµè¯
â âââ test-research-parser.mjs # è§£æåšåå
æµè¯
â âââ ... # éæ / ååœèæ¬
âââ src/
â âââ index.ts # FastMCP å
¥å£ + å·¥å
·æ³šå
â âââ agent/
â â âââ react.ts # ReAct æšçåŸªç¯ + Hooks
â â âââ llm.ts # OpenAI SDK + Sampling
â â âââ index.ts # run_agent / getLLMMode çå
Œ
± API é富åº
â âââ tools/
â â âââ manager.ts # ToolManager (è¶
æ¶/å¹¶å/éè¯)
â â âââ registry.ts # å·¥å
·æ³šåäžå¿ (æ¬å° + AnySearch ç»äžå
¥å£)
â â âââ index.ts # 6 䞪å
眮工å
·çå¯Œåºæ¡¶
â â âââ types.ts # ToolDefinition / ToolResult
â â âââ calculator.ts # å®å
šæ°åŠè§£æåš
â â âââ text.ts # text_stats + text_transform
â â âââ converter.ts # åäœæ¢ç®
â â âââ datetime.ts # æ¥ææ¶éŽ
â â âââ random.ts # éæºçæ
â â âââ anysearch.ts # AnySearch å·¥å
·å
è£
â â âââ anysearch-client.ts # MCPRuntime ç¶ææº
â âââ workflow/
â â âââ dag.ts # DAG å·¥äœæµçŒæ
â â âââ research.ts # 深床ç ç©¶äžé¶æ®µç®¡çº¿
â âââ memory/index.ts # æä¹
åè®°å¿
â âââ skill/index.ts # æèœæåäžå¹é
âââ dist/ # çŒè¯äº§ç©ååãå®å šäžè®Ÿè®¡ç念
å®å šçºŠæïŒ
ææ API Key ä» éè¿ç¯å¢åéäŒ éïŒæ°žäžå ¥ä»£ç
ToolManager å 眮èŸå ¥é¿åºŠéšçŠïŒé»è®€ 10,000 å笊ïŒ
calculator500 å笊ïŒé误åç±»ïŒ
hard(401/403/DNS/refused) çŽæ¥å€±èŽ¥ïŒtransient(timeout/429/5xx) èªåšéè¯ + ææ°éé¿ïŒæå€ 8sïŒè®¡ç®åšäœ¿çšèªç éåœäžéè§£æåšïŒäžäœ¿çš
eval()
讟计ååïŒ
åè®®äŒå ïŒäž¥æ Œéµå® MCP JSON-RPC over stdio/SSE
åå±è§£èŠïŒ
ToolManagerç»äžæœè±¡ïŒå·¥å ·å®ç°å¯ææçº§è容éïŒLLM / çœç» / å·¥å ·å±åæå€çº§ fallback
æ¬å°äŒå ïŒè®°å¿ / æèœæä¹ åå°æ¬å° JSONïŒæ éå€éšæ°æ®åº
é¶é 眮å¯å¯åšïŒæå°å¯çšé 眮䞺 0ïŒé»è®€èµ° Sampling æ Rule-basedïŒ
å¯è§æµæ§ïŒHooksïŒÂ§å «ïŒæäŸ LLM è°çšååæŠæªç¹ïŒå¯æ³šå ¥å®¡è®¡æ¥å¿ / è°çšç»è®¡ / å®å šåèŠïŒToolManager å 眮è°çšåå²ïŒäŸ¿äºåæŸäžè°è¯
åäºã讞å¯è¯
Apache License 2.0 © 2026 Microbiosis
åå ãçžå ³éŸæ¥
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Latest Blog Posts
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/Microbiosis/mini-agent-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server