MCP Create Server
MCP 创建服务器
动态 MCP 服务器管理服务,用于动态创建、运行和管理模型上下文协议 (MCP) 服务器。此服务本身充当 MCP 服务器,并以子进程的形式启动/管理其他 MCP 服务器,从而实现灵活的 MCP 生态系统。
主要特点
MCP 服务器代码的动态创建和执行
仅支持 TypeScript(计划在未来版本中支持 JavaScript 和 Python)
在子 MCP 服务器上执行工具
服务器代码更新并重启
删除不必要的服务器
Related MCP server: MCPMan
安装
注意:Docker 是运行此服务的推荐方式
Docker 安装(推荐)
# Build Docker image
docker build -t mcp-create .
# Run Docker container
docker run -it --rm mcp-create手动安装(仅限 TypeScript)
# Clone repository
git clone https://github.com/tesla0225/mcp-create.git
cd mcp-create
# Install dependencies
npm install
# Build
npm run build
# Run
npm start与 Claude Desktop 集成
将以下内容添加到您的 Claude Desktop 配置文件( claude_desktop_config.json )中:
{
"mcpServers": {
"mcp-create": {
"command": "docker",
"args": ["run", "-i", "--rm", "mcp-create"]
}
}
}可用工具
工具名称 | 描述 | 输入参数 | 输出 |
从模板创建服务器 | 从模板创建 MCP 服务器 | 语言:字符串 | { 服务器 ID:字符串,消息:字符串 } |
执行工具 | 在服务器上执行工具 | serverId: stringtoolName: stringargs: 对象 | 工具执行结果 |
获取服务器工具 | 获取服务器工具列表 | 服务器ID:字符串 | { 工具:工具定义[] } |
删除服务器 | 删除服务器 | 服务器ID:字符串 | { 成功:布尔值,消息:字符串 } |
列表服务器 | 获取正在运行的服务器列表 | 没有任何 | { 服务器:字符串[] } |
使用示例
创建新服务器
{
"name": "create-server-from-template",
"arguments": {
"language": "typescript"
}
}执行工具
{
"name": "execute-tool",
"arguments": {
"serverId": "ba7c9a4f-6ba8-4cad-8ec8-a41a08c19fac",
"toolName": "echo",
"args": {
"message": "Hello, dynamic MCP server!"
}
}
}技术规格
Node.js 18 或更高版本
TypeScript(必需)
依赖项:
@modelcontextprotocol/sdk:MCP 客户端/服务器实现
child_process(Node.js内置):子进程管理
fs/promises(Node.js 内置):文件操作
uuid:唯一服务器ID生成
安全注意事项
**代码执行限制:**当服务执行任意代码时,请考虑沙盒
**资源限制:**设置内存、CPU 使用率、文件数量等的限制。
**进程监控:**监控并强制终止僵尸进程或失控进程
**路径验证:**正确验证文件路径以防止目录遍历攻击
执照
麻省理工学院
Available Tools
5 toolscreate-server-from-templateC
Create a new MCP server from a template.
以下のテンプレートコードをベースに、ユーザーの要求に合わせたサーバーを実装してください。 言語に応じて適切なテンプレートを選択し、必要に応じて機能を追加・変更してください。
TypeScriptテンプレート:
import { Server } from "@modelcontextprotocol/sdk/server/index.js";
import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
import {
CallToolRequestSchema,
ListToolsRequestSchema
} from "@modelcontextprotocol/sdk/types.js";
const server = new Server({
name: "dynamic-test-server",
version: "1.0.0"
}, {
capabilities: {
tools: {}
}
});
// ここでツールを実装してください
server.setRequestHandler(ListToolsRequestSchema, async () => {
return {
tools: [{
name: "echo",
description: "Echo back a message",
inputSchema: {
type: "object",
properties: {
message: { type: "string" }
},
required: ["message"]
}
}]
};
});
server.setRequestHandler(CallToolRequestSchema, async (request) => {
if (request.params.name === "echo") {
// TypeScriptの型を適切に扱うため、型アサーションを使用
const message = request.params.arguments.message as string;
// または any を使う: const message: any = request.params.arguments.message;
return {
content: [
{
type: "text",
text: `Echo: ${message}`
}
]
};
}
throw new Error("Tool not found");
});
// Server startup
const transport = new StdioServerTransport();
server.connect(transport);Pythonテンプレート:
import asyncio
from mcp.server import Server
from mcp.server.stdio import stdio_server
app = Server("dynamic-test-server")
@app.list_tools()
async def list_tools():
return [
{
"name": "echo",
"description": "Echo back a message",
"inputSchema": {
"type": "object",
"properties": {
"message": {"type": "string"}
},
"required": ["message"]
}
}
]
@app.call_tool()
async def call_tool(name, arguments):
if name == "echo":
return [{"type": "text", "text": f"Echo: {arguments.get('message')}"}]
raise ValueError(f"Tool not found: {name}")
async def main():
async with stdio_server() as streams:
await app.run(
streams[0],
streams[1],
app.create_initialization_options()
)
if __name__ == "__main__":
asyncio.run(main())注意事項:
TypeScript実装時は、引数の型を適切に扱うために型アサーション(as string)を使用するか、 明示的に型を宣言してください(例:const value: string = request.params.arguments.someValue)。
複雑な型を扱う場合は、interface や type を定義して型安全性を確保することをお勧めします。
ユーザーの要求に応じて上記のテンプレートを参考にカスタマイズしてください。その際、基本的な構造を維持しつつ、ツール名や機能を変更できます。
| Name | Required | Description | Default |
|---|---|---|---|
| code | No | カスタマイズしたサーバーコード。テンプレートを元に変更したコードを入力してください。省略した場合はデフォルトのテンプレートが使用されます。 | |
| dependencies | No | 使用するライブラリとそのバージョン(例: { "axios": "^1.0.0" }) | |
| language | Yes | The programming language for the template |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden for behavioral disclosure. It mentions implementation details (e.g., type handling in TypeScript) and customization guidance, but fails to disclose critical traits: whether this is a read/write operation (implied creation but not stated), permission requirements, side effects (e.g., server deployment), error handling, or output format. For a creation tool with zero annotation coverage, this leaves significant gaps in understanding its behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is excessively long (over 500 words) and poorly structured, with extensive code blocks and implementation notes that don't efficiently convey tool usage. It's front-loaded with a clear purpose but buried in verbose templates and language-specific details. Sentences like '注意事項:...' and template code could be condensed or moved to external documentation, reducing conciseness.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (creation operation, 3 parameters, no output schema, no annotations), the description is incomplete. It lacks output expectations (what happens after creation—e.g., server ID, status), error conditions, and integration context with siblings. While it provides template code, it doesn't address how the created server integrates with other tools (e.g., 'execute-tool' on the new server), leaving gaps for an agent to use it effectively.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all three parameters thoroughly (code, dependencies, language). The description adds minimal parameter semantics beyond the schema—it references 'language' through template examples and implies 'code' customization, but doesn't explain parameter interactions or provide additional syntax/format details. Baseline 3 is appropriate when the schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the purpose: 'Create a new MCP server from a template' with specific verbs ('create', 'implement') and resources ('MCP server', 'template code'). It distinguishes from siblings like 'delete-server' (destructive) and 'list-servers' (read-only) by focusing on creation from templates. However, it doesn't explicitly contrast with 'execute-tool' or 'get-server-tools', which slightly reduces differentiation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage context through template examples and customization guidance ('ユーザーの要求に応じて上記のテンプレートを参考にカスタマイズしてください'), but lacks explicit when-to-use rules or alternatives. It doesn't specify prerequisites (e.g., when to use this vs. manually coding a server) or compare with sibling tools like 'execute-tool' for tool execution vs. server creation.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete-serverC
Delete a server
| Name | Required | Description | Default |
|---|---|---|---|
| serverId | Yes | The ID of the server |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden but only states the action ('delete') without disclosing critical behavioral traits. It doesn't mention if deletion is permanent, requires specific permissions, has side effects (e.g., data loss), rate limits, or what happens on success/failure. This is inadequate for a destructive operation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, efficient sentence ('Delete a server') that is front-loaded and wastes no words. It directly conveys the core action without unnecessary elaboration, making it highly concise and well-structured.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's destructive nature, lack of annotations, and no output schema, the description is incomplete. It doesn't address behavioral risks, return values, or error handling, leaving significant gaps for an AI agent to understand the tool's full context and implications.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 100% description coverage, with 'serverId' clearly documented as 'The ID of the server'. The description adds no parameter-specific information beyond what the schema provides, so it meets the baseline of 3 where schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description 'Delete a server' clearly states the action (delete) and resource (server), making the purpose immediately understandable. It distinguishes from siblings like 'create-server-from-template' (creation) and 'list-servers' (listing), but doesn't specify what type of server or deletion scope, keeping it from a perfect score.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus alternatives. It doesn't mention prerequisites (e.g., server must exist), exclusions (e.g., cannot delete if active), or sibling tools like 'execute-tool' that might offer alternative deletion methods. The description alone offers no usage context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
execute-toolC
Execute a tool on a server
| Name | Required | Description | Default |
|---|---|---|---|
| args | No | The arguments to pass to the tool | |
| serverId | Yes | The ID of the server | |
| toolName | Yes | The name of the tool to execute |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden of behavioral disclosure. It states the action ('execute') but doesn't disclose traits like whether this is a read-only or destructive operation, authentication needs, rate limits, error handling, or what happens during execution (e.g., side effects, output format). For a tool with no annotations and potential mutation implications, this is a significant gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence with zero waste, making it appropriately sized and front-loaded. However, it's overly concise to the point of under-specification, lacking details that could help an agent use it effectively, which slightly reduces its utility.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the complexity of executing a tool (likely a mutation with side effects), no annotations, no output schema, and 3 parameters, the description is incomplete. It doesn't explain return values, error conditions, or behavioral context, leaving critical gaps for an agent to understand how to invoke it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema description coverage is 100%, so the schema already documents all three parameters (args, serverId, toolName) with their types and descriptions. The description adds no meaning beyond this, such as explaining the structure of 'args' or how 'toolName' relates to available tools. Baseline 3 is appropriate when the schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states the action ('execute') and target ('a tool on a server'), which provides a basic purpose. However, it's vague about what 'execute' entails (e.g., running a script, command, or function) and doesn't distinguish from siblings like 'get-server-tools' (which likely lists tools) or 'delete-server' (which destroys resources). It avoids tautology by not merely restating the name.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus alternatives. It doesn't mention prerequisites (e.g., needing a valid server ID or tool name), exclusions, or how it relates to siblings like 'get-server-tools' (which might be needed first to identify tools). The description implies usage but offers no explicit context or comparisons.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get-server-toolsC
Get the tools available on a server
| Name | Required | Description | Default |
|---|---|---|---|
| serverId | Yes | The ID of the server |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden of behavioral disclosure. It states 'Get' but does not clarify if this is a read-only operation, what permissions are required, how results are returned (e.g., list format, pagination), or potential errors. This is inadequate for a tool with no annotation coverage.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, efficient sentence with no wasted words, making it easy to parse. It is appropriately sized for a simple tool, though it could benefit from more detail to improve other dimensions without sacrificing conciseness.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no annotations and no output schema, the description is incomplete. It does not explain what 'tools available' means (e.g., types, formats), how results are structured, or any behavioral aspects like error handling. For a tool with one parameter but lacking structured context, this is insufficient.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 100% description coverage, documenting the 'serverId' parameter fully. The description does not add any meaning beyond the schema, such as explaining what constitutes a valid server ID or how to obtain it. Baseline 3 is appropriate as the schema handles parameter documentation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Get') and resource ('tools available on a server'), making the purpose understandable. However, it does not differentiate from sibling tools like 'list-servers' or 'execute-tool', which also involve server-related operations, so it lacks specific distinction.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives. It does not mention prerequisites, such as needing a valid server ID, or compare it to siblings like 'list-servers' for server enumeration or 'execute-tool' for tool execution, leaving usage context unclear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list-serversB
List all running servers
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden of behavioral disclosure. While 'List all running servers' implies a read-only operation that returns server information, it lacks details on permissions, rate limits, pagination, or response format. For a tool with zero annotation coverage, this is a significant gap in transparency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description 'List all running servers' is a single, efficient sentence that front-loads the core purpose with zero waste. It's appropriately sized for a simple tool with no parameters, making it easy for an agent to parse quickly.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (0 parameters, no output schema, no annotations), the description is minimally adequate. It states what the tool does but lacks behavioral context like response format or usage guidelines. Without annotations or output schema, the description should ideally provide more completeness, but it meets the basic requirement for a low-complexity tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 0 parameters with 100% coverage, so no parameter documentation is needed. The description doesn't add parameter details, which is appropriate since there are none. A baseline score of 4 is given as the description doesn't need to compensate for any parameter gaps.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description 'List all running servers' clearly states the verb ('List') and resource ('running servers'), making the purpose immediately understandable. However, it doesn't explicitly differentiate from sibling tools like 'get-server-tools', which might also retrieve server-related information but focuses on tools rather than servers themselves.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives. It doesn't mention prerequisites, context for usage, or compare it to siblings like 'get-server-tools' (which might list tools on servers) or 'create-server-from-template' (for creating servers). This leaves the agent without explicit usage instructions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
5 tool updates
v1.0.0- First observed
create-server-from-template - First observed
delete-server - First observed
execute-tool - First observed
get-server-tools - First observed
list-servers
TDQS
Scored across 5 tools
Most tools have distinct purposes: create, delete, list, get tools, and execute. However, 'execute-tool' could potentially overlap with server-specific tools, but its description clarifies it's for executing tools on servers, making it reasonably distinct. The set covers different aspects of server management without significant ambiguity.
All tools follow a consistent verb-noun pattern with hyphens: create-server-from-template, delete-server, execute-tool, get-server-tools, list-servers. The naming is predictable and uniform throughout the set, making it easy for agents to understand the action and target.
With 5 tools, the count is appropriate for a server management domain, covering core operations like creation, deletion, listing, and tool interaction. It's slightly lean but reasonable; adding a tool for server status or configuration might enhance completeness, but the current scope is well-defined.
The tool set covers basic server lifecycle (create, delete, list) and tool interaction (get tools, execute), but has notable gaps. Missing operations include updating server configurations, stopping/starting servers, or monitoring server status, which are common in server management. Agents might encounter dead ends when needing to modify existing servers beyond deletion.
Maintenance
Related MCP Connectors
MCP server for building and testing AI agents with multi-model experimentation and insights.
MCP server for progressive tool usage at any scale (see https://klavis.ai)
A comprehensive Model Context Protocol (MCP) server that enables AI assistants to interact with yo…
Create, deploy, and operate MCP servers directly from your GitHub repositories.
Related MCP Servers
- AlicenseAqualityDmaintenanceA lightweight framework for building and running Model Context Protocol (MCP) servers using FastMCP, providing tools for development, debugging, and server management.4MIT
- AlicenseNot gradedqualityDmaintenanceA Model Context Protocol server manager that acts as a proxy/multiplexer, enabling connections to multiple MCP servers simultaneously and providing JavaScript code execution with access to all connected MCP tools. Supports both stdio and HTTP transports with OAuth authentication, batch tool invocation, and dynamic server management.5 npmMIT
- AlicenseBqualityCmaintenanceDynamic MCP server for Node.js enabling runtime tool creation, management, and execution in isolated sandboxes (Docker or Node).811 npm1MIT
- AlicenseNot gradedqualityDmaintenanceAn enhanced dynamic MCP server management service that creates, runs, and manages Model Context Protocol servers with multi-language support and strict parameter validation.MIT