mcpcodeserver
ทางการแทนที่จะเรียกใช้เครื่องมือ MCP โดยตรง mcpcodeserver จะแปลงการเรียกใช้เครื่องมือ MCP เป็นโปรแกรม TypeScript ช่วยให้ LLM สามารถจัดลำดับการทำงานได้อย่างชาญฉลาดและมีความหน่วงต่ำลง
คุณทำอะไรได้บ้างด้วย Mcpcodeserver MCP?
- List connected child servers — ใช้
list_serversเพื่อดูว่าเซิร์ฟเวอร์ย่อยใดบ้างที่พร้อมใช้งานและทำงานอยู่ - Get TypeScript definitions for tools — เรียก
get_tool_definitionsเพื่อดึงลายเซ็นฟังก์ชันแบบมีชนิดข้อมูลสำหรับเครื่องมือของเซิร์ฟเวอร์ทั้งหมดหรือเฉพาะเซิร์ฟเวอร์ - Execute multi-tool workflows as code — เขียน TypeScript ที่เชื่อมโยงการเรียกใช้เครื่องมือหลายครั้ง การวนซ้ำ และเงื่อนไขผ่าน
generate_and_execute_code - Filter tool definitions by server — ส่ง
server_namesไปยังget_tool_definitionsเพื่อลดการใช้บริบทและมุ่งเน้นไปที่เครื่องมือที่เกี่ยวข้อง - Handle errors in tool sequences — ใช้ try/catch ภายในโค้ดที่สร้างขึ้นเพื่อกู้คืนจากความล้มเหลวของเครื่องมือแต่ละรายการโดยไม่ต้องยกเลิกเวิร์กโฟลว์ทั้งหมด
เอกสาร
mcpcodeserver
เซิร์ฟเวอร์พร็อกซี Model Context Protocol (MCP) ที่แปลการเรียกใช้เครื่องมือเป็นการสร้างโค้ด TypeScript แทนที่จะเรียกใช้เครื่องมือหลายครั้งไปมา LLM สามารถเขียนโค้ด TypeScript ที่เรียกใช้เครื่องมือหลายตัวได้อย่างเป็นธรรมชาติ ลดค่าใช้จ่ายด้านโทเค็นและใช้ประโยชน์จากความสามารถในการสร้างโค้ดที่เหนือกว่าของ LLM
❌ หากไม่มี mcpcodeserver
LLM จะเรียกใช้เครื่องมือตามลำดับหลายครั้ง สิ้นเปลืองโทเค็นและประสบปัญหากับเวิร์กโฟลว์ที่ซับซ้อน:
- ❌ การเดินทางไป-กลับหลายรอบระหว่าง LLM และเครื่องมือ
- ❌ ลำดับการเรียกใช้เครื่องมือที่ซับซ้อนมีแนวโน้มเกิดข้อผิดพลาด
- ❌ ไม่สามารถส่งผ่านข้อมูลระหว่างเครื่องมือได้ง่าย
- ❌ การจัดการข้อผิดพลาดและการควบคุมโฟลว์มีจำกัด
✅ เมื่อใช้ mcpcodeserver
LLM เขียนโค้ด TypeScript ที่เรียกใช้เครื่องมือหลายตัวได้อย่างเป็นธรรมชาติ:
- ✅ เขียนโค้ดเพื่อเรียกใช้เครื่องมือหลายตัวตามลำดับ
- ✅ ใช้ตัวแปร ลูป และเงื่อนไขได้อย่างเป็นธรรมชาติ
- ✅ จัดการข้อผิดพลาดได้ดีขึ้นด้วย try/catch
- ✅ ลดการใช้โทเค็นด้วยการรวมการดำเนินการ
- ✅ ใช้ประโยชน์จากความสามารถในการสร้างโค้ดที่แข็งแกร่งของ LLM
เริ่มต้นอย่างรวดเร็ว
- ติดตั้ง mcpcodeserver ในไคลเอนต์ MCP ของคุณ (ดูส่วนการติดตั้งด้านล่าง)
- สร้างไฟล์การกำหนดค่า
mcp.jsonพร้อมกับเซิร์ฟเวอร์ MCP ลูกของคุณ - เริ่มใช้งาน - LLM ของคุณสามารถสร้างและรันโค้ด TypeScript ที่เรียกใช้เครื่องมือของคุณได้แล้ว
// Instead of multiple tool calls, write code like this:
const files = await filesystem.list_directory({ path: "/tmp" });
const results = await Promise.all(
files.map(file => filesystem.read_file({ path: file.path }))
);
return results.filter(content => content.includes("important"));
ภาพรวม
mcpcodeserver เป็นเซิร์ฟเวอร์ MCP ที่ไม่เหมือนใครซึ่ง:
- ทำหน้าที่เป็นไคลเอนต์ MCP เพื่อเชื่อมต่อกับเซิร์ฟเวอร์ MCP ลูกหนึ่งตัวหรือมากกว่า
- ค้นพบเครื่องมือทั้งหมดจากเซิร์ฟเวอร์ลูก
- เปิดเผยเครื่องมือที่ทรงพลังสามตัวแก่ไคลเอนต์ LLM แม่:
list_servers- แสดงรายการเซิร์ฟเวอร์ย่อยทั้งหมดที่เชื่อมต่อกับเซิร์ฟเวอร์ MCP นี้get_tool_definitions- ส่งคืนนิยามประเภท TypeScript สำหรับเครื่องมือที่ค้นพบ (สามารถกรองตามเซิร์ฟเวอร์ได้)generate_and_execute_code- สร้างและรันโค้ด TypeScript ที่เรียกใช้เครื่องมือเหล่านั้นในแซนด์บ็อกซ์
สถาปัตยกรรมนี้ช่วยให้ LLM สามารถจัดการเวิร์กโฟลว์หลายเครื่องมือที่ซับซ้อนได้โดยการเขียนโค้ดแทนการเรียกใช้เครื่องมือตามลำดับ ซึ่งมักจะมีประสิทธิภาพและเป็นธรรมชาติมากกว่าสำหรับโมเดลภาษาสมัยใหม่
งานวิจัยและผลงานที่เกี่ยวข้อง
แนวทางนี้ได้รับแรงบันดาลใจจากงานวิจัยล่าสุดที่แสดงให้เห็นว่า LLM ทำงานได้ดีขึ้นเมื่อสร้างโค้ดที่ปฏิบัติการได้แทนที่จะเรียกใช้เครื่องมือโดยตรง:
-
CodeAct: Your LLM Agent Acts Better when Generating Code (Apple, ICML 2024) - แสดงให้เห็นว่าเอเจนต์ LLM มีอัตราความสำเร็จสูงขึ้นถึง 20% เมื่อใช้โค้ด Python ที่ปฏิบัติการได้เป็นพื้นที่การกระทำที่เป็นหนึ่งเดียวแทนที่จะใช้รูปแบบการเรียกใช้เครื่องมือที่กำหนดไว้ล่วงหน้า
-
Cloudflare Code Mode - การนำไปใช้ที่คล้ายกันซึ่งแปลงเครื่องมือ MCP เป็น TypeScript API แสดงให้เห็นว่า "LLM เขียนโค้ดเพื่อเรียกใช้ MCP ได้ดีกว่าการเรียกใช้ MCP โดยตรง"
ข้อมูลเชิงลึกที่สำคัญจากงานวิจัยนี้คือ LLM ได้รับการฝึกฝนอย่างกว้างขวางเกี่ยวกับโค้ดในโลกแห่งความเป็นจริง แต่มีประสบการณ์จำกัดกับรูปแบบการเรียกใช้เครื่องมือสังเคราะห์ ทำให้การสร้างโค้ดเป็นแนวทางที่เป็นธรรมชาติและมีประสิทธิภาพมากขึ้นสำหรับเวิร์กโฟลว์เอเจนต์ที่ซับซ้อน
ทำไมต้องใช้สิ่งนี้?
ปัญหาการเรียกใช้เครื่องมือแบบดั้งเดิม
- การเดินทางไป-กลับหลายรอบระหว่าง LLM และเครื่องมือทำให้สิ้นเปลืองโทเค็น
- LLM มักประสบปัญหากับลำดับการเรียกใช้เครื่องมือที่ซับซ้อน
- การเรียกใช้เครื่องมือแต่ละครั้งต้องอาศัยความเข้าใจและการจัดรูปแบบ JSON schema
- ไม่สามารถส่งผ่านข้อมูลระหว่างเครื่องมือได้ง่ายโดยไม่ผ่าน LLM
โซลูชันการสร้างโค้ด
- เขียนโค้ด TypeScript เพื่อเรียกใช้เครื่องมือหลายตัวตามลำดับ
- ใช้ตัวแปร ลูป และเงื่อนไขได้อย่างเป็นธรรมชาติ
- จัดการข้อผิดพลาดได้ดีขึ้นด้วย try/catch
- ลดการใช้โทเค็นด้วยการรวมการดำเนินการ
- ใช้ประโยชน์จากความสามารถในการสร้างโค้ดที่แข็งแกร่งของ LLM
การค้นพบเครื่องมือแบบไดนามิก
mcpcodeserver จะตรวจสอบเซิร์ฟเวอร์ MCP ลูกโดยอัตโนมัติเพื่อดูการเปลี่ยนแปลงของเครื่องมือ และแจ้งเตือนไคลเอนต์แม่เมื่อมีการเพิ่ม ลบ หรือแก้ไขเครื่องมือ:
- รีเฟรชอัตโนมัติ: ตรวจสอบการเปลี่ยนแปลงของเครื่องมือทุก 30 วินาที
- การแจ้งเตือนแบบเรียลไทม์: ส่ง
notifications/tools/list_changedไปยังไคลเอนต์แม่ - อัปเดตแบบไดนามิก: นิยามเครื่องมือและสรุปจะอัปเดตโดยอัตโนมัติ
- ไม่ต้องรีเฟรชด้วยตนเอง: LLM แม่ได้รับการแจ้งเตือนให้รีเฟรชความรู้เกี่ยวกับเครื่องมือ
สิ่งนี้ทำให้แน่ใจว่า LLM แม่มีนิยามเครื่องมือที่เป็นปัจจุบันที่สุดเสมอโดยไม่ต้องดำเนินการด้วยตนเอง
การกรองเซิร์ฟเวอร์
เพื่อลดการใช้หน้าต่างบริบทและปรับปรุงโฟกัส mcpcodeserver รองรับการกรองนิยามเครื่องมือตามเซิร์ฟเวอร์ที่ระบุ:
- แสดงรายการเซิร์ฟเวอร์ที่พร้อมใช้งาน: ใช้
list_serversเพื่อดูเซิร์ฟเวอร์ย่อยทั้งหมดที่เชื่อมต่ออยู่ - นิยามเครื่องมือที่กรองแล้ว: ใช้
get_tool_definitionsพร้อมพารามิเตอร์server_namesเพื่อรับเครื่องมือจากเซิร์ฟเวอร์ที่ระบุเท่านั้น - ลดความละเอียด: รับนิยาม TypeScript ที่โฟกัสโดยไม่ทำให้หน้าต่างบริบทของ LLM ล้น
- การตั้งชื่อเมธอดตามเนมสเปซ: ฟังก์ชันที่สร้างขึ้นทั้งหมดจะมีคำนำหน้าด้วยชื่อเซิร์ฟเวอร์ (เช่น
pizzashop_create_pizza,filesystem_read_file)
ตัวอย่างการใช้งาน:
// List available servers
const servers = await list_servers({});
// Returns: ["pizzashop", "filesystem", "memory"]
// Get all tool definitions
const allTools = await get_tool_definitions({});
// Get only pizzashop tools
const pizzashopTools = await get_tool_definitions({
server_names: ["pizzashop"]
});
คุณสมบัติ MCP ขั้นสูง
mcpcodeserver รองรับการส่งผ่านคุณสมบัติโปรโตคอล MCP ขั้นสูงเมื่อทั้งไคลเอนต์แม่และเซิร์ฟเวอร์ลูกรองรับ:
- Elicitation: เซิร์ฟเวอร์ลูกสามารถขอข้อมูลจากผู้ใช้ระหว่างการดำเนินการเครื่องมือ ซึ่งจะถูกส่งผ่านไปยังไคลเอนต์แม่
- Roots: แสดงรายการและรวบรวม roots จากเซิร์ฟเวอร์ลูกทั้งหมด ให้มุมมองที่เป็นหนึ่งเดียวของทรัพยากรที่พร้อมใช้งาน
- Sampling: เปิดใช้งานการส่งคำขอ sampling ของ LLM ไปยังเซิร์ฟเวอร์ลูกเพื่อความสามารถ AI ขั้นสูง
คุณสมบัติเหล่านี้จะถูกโฆษณาไปยังไคลเอนต์แม่โดยอัตโนมัติและทำงานได้อย่างราบรื่นเมื่อเซิร์ฟเวอร์ MCP ลูกที่เกี่ยวข้องรองรับ
เริ่มต้นอย่างรวดเร็ว
ทดลองใช้ทันทีด้วย npx (ไม่ต้องติดตั้ง):
# From GitHub
npx github:zbowling/mcpcodeserver --help
# Or when published to npm
npx mcpcodeserver --help
🛠️ การติดตั้ง
ข้อกำหนด
- Node.js >= v18.0.0
- Cursor, Claude Code, VSCode, Windsurf หรือไคลเอนต์ MCP อื่นๆ
การติดตั้งผ่าน Smithery
เพื่อติดตั้ง mcpcodeserver สำหรับไคลเอนต์ใดๆ โดยอัตโนมัติผ่าน Smithery:
npx -y @smithery/cli@latest install mcpcodeserver --client <client-name> --key <smithery-key>
ติดตั้งใน Cursor
ไปที่: Settings -> Cursor Settings -> MCP -> Add new global MCP server
การวางการกำหนดค่าต่อไปนี้ลงในไฟล์ ~/.cursor/mcp.json ของ Cursor เป็นแนวทางที่แนะนำ คุณยังสามารถติดตั้งในโปรเจกต์เฉพาะได้โดยการสร้าง .cursor/mcp.json ในโฟลเดอร์โปรเจกต์ของคุณ
การติดตั้ง Cursor แบบคลิกเดียว
การเชื่อมต่อเซิร์ฟเวอร์ภายในของ Cursor
{
"mcpServers": {
"mcpcodeserver": {
"command": "npx",
"args": ["-y", "mcpcodeserver", "--config", "/path/to/your/mcp.json"]
}
}
}
การเชื่อมต่อเซิร์ฟเวอร์ระยะไกลของ Cursor (หากคุณตั้งค่าการขนส่ง HTTP)
{
"mcpServers": {
"mcpcodeserver": {
"url": "http://localhost:3000/mcp"
}
}
}
ติดตั้งใน Claude Code
รันคำสั่งนี้ ดูข้อมูลเพิ่มเติมได้ที่ เอกสาร Claude Code MCP
การเชื่อมต่อเซิร์ฟเวอร์ภายในของ Claude Code
claude mcp add mcpcodeserver -- npx -y mcpcodeserver --config /path/to/your/mcp.json
การเชื่อมต่อเซิร์ฟเวอร์ระยะไกลของ Claude Code
claude mcp add --transport http mcpcodeserver http://localhost:3000/mcp
ติดตั้งใน VSCode
การติดตั้ง VSCode แบบคลิกเดียว
การกำหนดค่า VSCode ด้วยตนเอง
เพิ่มในการตั้งค่า MCP ของ VSCode:
{
"mcpServers": {
"mcpcodeserver": {
"command": "npx",
"args": ["-y", "mcpcodeserver", "--config", "/path/to/your/mcp.json"]
}
}
}
ติดตั้งใน Windsurf
การติดตั้ง Windsurf แบบคลิกเดียว
ติดตั้งใน AI Coding Assistants
สำหรับ Continue, Cline, และ RooCode เพิ่มในการกำหนดค่าของคุณ:
{
"mcpServers": {
"mcpcodeserver": {
"command": "npx",
"args": ["-y", "mcpcodeserver", "--config", "/path/to/your/mcp.json"]
}
}
}
ติดตั้งใน Amp
รันคำสั่งนี้ในเทอร์มินัลของคุณ ดูข้อมูลเพิ่มเติมได้ที่ เอกสาร Amp MCP
amp mcp add mcpcodeserver -- npx -y mcpcodeserver --config /path/to/your/mcp.json
ติดตั้งใน Text Editors
สำหรับ Aider, Codium, Zed, Nova, และ Sublime Text เพิ่มในการกำหนดค่าของคุณ:
{
"mcpServers": {
"mcpcodeserver": {
"command": "npx",
"args": ["-y", "mcpcodeserver", "--config", "/path/to/your/mcp.json"]
}
}
}
ติดตั้งใน Neovim
เพิ่มในการกำหนดค่า Neovim MCP:
{
mcpServers = {
mcpcodeserver = {
command = "npx",
args = {"-y", "mcpcodeserver", "--config", "/path/to/your/mcp.json"}
}
}
}
ติดตั้งใน Emacs
เพิ่มในการกำหนดค่า Emacs MCP:
(setq mcp-servers
'((mcpcodeserver
:command "npx"
:args ("-y" "mcpcodeserver" "--config" "/path/to/your/mcp.json"))))
ติดตั้งใน JetBrains IDEs
สำหรับ IntelliJ IDEA, WebStorm, PyCharm, และ Android Studio เพิ่มในการตั้งค่า MCP ของคุณ:
{
"mcpServers": {
"mcpcodeserver": {
"command": "npx",
"args": ["-y", "mcpcodeserver", "--config", "/path/to/your/mcp.json"]
}
}
}
ติดตั้งใน AI Tools
สำหรับ Codeium, Tabnine, GitHub Copilot, และ Amazon CodeWhisperer เพิ่มในการตั้งค่า MCP ของคุณ:
{
"mcpServers": {
"mcpcodeserver": {
"command": "npx",
"args": ["-y", "mcpcodeserver", "--config", "/path/to/your/mcp.json"]
}
}
}
ติดตั้งใน Cloud IDEs
สำหรับ Replit, CodeSandbox, StackBlitz, GitPod, GitHub Codespaces, GitLab Web IDE, และ Bitbucket Cloud เพิ่มในการตั้งค่า MCP ของคุณ:
{
"mcpServers": {
"mcpcodeserver": {
"command": "npx",
"args": ["-y", "mcpcodeserver", "--config", "/path/to/your/mcp.json"]
}
}
}
ติดตั้งในเครื่องมืออื่นๆ
สำหรับ Xcode, Fleet, Sourcegraph, และ JetBrains Gateway เพิ่มในการกำหนดค่า MCP ของคุณ:
{
"mcpServers": {
"mcpcodeserver": {
"command": "npx",
"args": ["-y", "mcpcodeserver", "--config", "/path/to/your/mcp.json"]
}
}
}
ติดตั้งใน Remote Development
สำหรับสภาพแวดล้อมการพัฒนาระยะไกล คุณยังสามารถใช้การขนส่ง HTTP:
{
"mcpServers": {
"mcpcodeserver": {
"url": "http://your-server:3000/mcp"
}
}
}
ไฟล์การกำหนดค่า
สร้างไฟล์การกำหนดค่า mcp.json เพื่อกำหนดเซิร์ฟเวอร์ MCP ลูกของคุณ:
{
"mcpServers": {
"filesystem": {
"command": "npx",
"args": ["-y", "@modelcontextprotocol/server-filesystem", "/tmp"],
"env": { "DEBUG": "false" }
},
"memory": {
"command": "npx",
"args": ["-y", "@modelcontextprotocol/server-memory"]
},
"brave-search": {
"command": "npx",
"args": ["-y", "@modelcontextprotocol/server-brave-search"],
"env": { "BRAVE_API_KEY": "your-api-key" }
}
}
}
การติดตั้งสำหรับการพัฒนา
# Install dependencies (using Bun for faster performance)
bun install
# Or with npm
npm install
# Build the project
bun run build
# Test the built server
bun dist/index.js --help
หมายเหตุ: โปรเจกต์นี้ใช้ Bun เพื่อประสิทธิภาพที่ดีขึ้น แต่ npm/node ก็ทำงานได้ดีเช่นกัน
🚨 การแก้ไขปัญหา
ข้อผิดพลาด Module Not Found
หากคุณพบ ERR_MODULE_NOT_FOUND ให้ลองใช้ bunx แทน npx:
{
"mcpServers": {
"mcpcodeserver": {
"command": "bunx",
"args": ["-y", "mcpcodeserver", "--config", "/path/to/your/mcp.json"]
}
}
}
ปัญหา ESM Resolution
สำหรับข้อผิดพลาดเช่น Error: Cannot find module ให้ลองใช้แฟล็ก --experimental-vm-modules:
{
"mcpServers": {
"mcpcodeserver": {
"command": "npx",
"args": ["-y", "--node-options=--experimental-vm-modules", "mcpcodeserver", "--config", "/path/to/your/mcp.json"]
}
}
}
ปัญหา TLS/Certificate
ใช้แฟล็ก --experimental-fetch เพื่อข้ามปัญหาที่เกี่ยวข้องกับ TLS:
{
"mcpServers": {
"mcpcodeserver": {
"command": "npx",
"args": ["-y", "--node-options=--experimental-fetch", "mcpcodeserver", "--config", "/path/to/your/mcp.json"]
}
}
}
ข้อผิดพลาดทั่วไปของไคลเอนต์ MCP
- ลองเพิ่ม
@latestต่อท้ายชื่อแพ็คเกจ - ใช้
bunxเป็นทางเลือกแทนnpx - พิจารณาใช้
denoเป็นอีกทางเลือกหนึ่ง - ตรวจสอบให้แน่ใจว่าคุณใช้ Node.js v18 หรือสูงกว่าเพื่อรองรับ fetch ดั้งเดิม
ปัญหาการกำหนดค่า
- ตรวจสอบให้แน่ใจว่าไฟล์
mcp.jsonของคุณเป็น JSON ที่ถูกต้อง - ตรวจสอบว่าคำสั่งเซิร์ฟเวอร์ลูกทั้งหมดพร้อมใช้งานใน PATH ของคุณ
- ตรวจสอบว่าเซิร์ฟเวอร์ลูกสามารถเริ่มต้นได้อย่างอิสระ
- ตรวจสอบสิทธิ์ของไฟล์สำหรับพาธไฟล์การกำหนดค่า
การทดสอบด้วย MCP Inspector
npx -y @modelcontextprotocol/inspector npx mcpcodeserver --config /path/to/your/mcp.json
💻 การพัฒนา
อาร์กิวเมนต์ CLI
mcpcodeserver ยอมรับแฟล็ก CLI ต่อไปนี้:
--config <path>– พาธไปยังไฟล์การกำหนดค่า MCP (ค่าเริ่มต้น:./mcp.json)--transport <stdio|http>– การขนส่งที่จะใช้ (stdioโดยค่าเริ่มต้น) โปรดทราบว่าการขนส่ง HTTP จะให้ทั้งจุดสิ้นสุด HTTP และ SSE โดยอัตโนมัติ--port <number>– พอร์ตที่จะรับฟังเมื่อใช้การขนส่งhttp(ค่าเริ่มต้น3000)--help– แสดงข้อความช่วยเหลือ
ตัวอย่างด้วยการขนส่ง HTTP และพอร์ต 8080:
npx mcpcodeserver --config /path/to/mcp.json --transport http --port 8080
ตัวอย่างด้วยการขนส่ง stdio:
npx mcpcodeserver --config /path/to/mcp.json --transport stdio
ตัวแปรสภาพแวดล้อม
คุณสามารถใช้ตัวแปรสภาพแวดล้อมสำหรับการกำหนดค่า:
MCP_CONFIG_PATH– พาธไปยังไฟล์การกำหนดค่า MCP (ทางเลือกแทน--config)MCP_TRANSPORT– ประเภทการขนส่ง (ทางเลือกแทน--transport)MCP_PORT– หมายเลขพอร์ตสำหรับการขนส่ง HTTP (ทางเลือกแทน--port)
ตัวอย่างด้วยตัวแปรสภาพแวดล้อม:
# .env
MCP_CONFIG_PATH=/path/to/your/mcp.json
MCP_TRANSPORT=stdio
ตัวอย่างการกำหนดค่า MCP โดยใช้ตัวแปรสภาพแวดล้อม:
{
"mcpServers": {
"mcpcodeserver": {
"command": "npx",
"args": ["-y", "mcpcodeserver"],
"env": {
"MCP_CONFIG_PATH": "/path/to/your/mcp.json"
}
}
}
}
หมายเหตุ: แฟล็ก CLI มีความสำคัญกว่าตัวแปรสภาพแวดล้อมเมื่อมีการระบุทั้งสองอย่าง
การกำหนดค่าการพัฒนาในเครื่อง
สำหรับการพัฒนาในเครื่อง คุณสามารถรันซอร์ส TypeScript ได้โดยตรง:
{
"mcpServers": {
"mcpcodeserver": {
"command": "npx",
"args": ["tsx", "/path/to/mcpcodeserver/src/index.ts", "--config", "/path/to/your/mcp.json"]
}
}
}
โหมดการทำงาน
โหมด Stdio (ค่าเริ่มต้น)
เซิร์ฟเวอร์ทำงานในโหมด stdio ตามค่าเริ่มต้น ซึ่งเหมาะสำหรับการรวมเข้ากับไคลเอนต์ MCP เช่น Claude Desktop:
# Run in stdio mode
npx mcpcodeserver --config mcp.json
# Or with custom config path
npx mcpcodeserver --config /path/to/your/mcp.json
โหมด HTTP
สำหรับการดีบัก ทดสอบ หรือรวมเข้ากับไคลเอนต์ MCP บนเว็บ คุณสามารถรันเซิร์ฟเวอร์ในโหมด HTTP:
# Run in HTTP mode on default port 3000
npx mcpcodeserver --http --config mcp.json
# Run on custom port and host
npx mcpcodeserver --http --port 8080 --host 0.0.0.0 --config mcp.json
เมื่อทำงานในโหมด HTTP เซิร์ฟเวอร์จะพร้อมใช้งานที่:
- URL เซิร์ฟเวอร์:
http://localhost:3000/mcp(หรือโฮสต์:พอร์ตที่คุณกำหนดเอง) - MCP Inspector: ใช้
npx @modelcontextprotocol/inspector http://localhost:3000/mcpเพื่อดีบักและทดสอบ
การรวม MCP Inspector
MCP Inspector เป็นเครื่องมือที่ทรงพลังสำหรับการดีบักและทดสอบเซิร์ฟเวอร์ MCP เมื่อทำงานในโหมด HTTP คุณสามารถใช้เพื่อ:
- ตรวจสอบเครื่องมือที่มีอยู่และ schema ของมัน
- ทดสอบการเรียกใช้เครื่องมือแบบโต้ตอบ
- ดีบักการเข้าถึงทรัพยากรและพรอมต์
- ตรวจสอบการแจ้งเตือนแบบเรียลไทม์
# Start the server in HTTP mode
npx mcpcodeserver --http --config mcp.json
# In another terminal, start the MCP Inspector
npx @modelcontextprotocol/inspector http://localhost:3000/mcp
# Or use the shorthand script (includes all example servers)
npm run inspector
Inspector จะเปิดในเบราว์เซอร์ของคุณและให้อินเทอร์เฟซเต็มรูปแบบสำหรับการสำรวจและทดสอบเซิร์ฟเวอร์ MCP ของคุณ
หมายเหตุ: คำสั่ง npm run inspector ใช้ mcp-test.json ซึ่งรวมเซิร์ฟเวอร์ MCP 8 ตัว (เครื่องมือทั้งหมด 67 รายการ) จาก ตัวอย่างอย่างเป็นทางการ รวมถึงเซิร์ฟเวอร์ที่ใช้ TypeScript (npx) และ Python (uvx)
การกำหนดค่า
สร้างไฟล์ mcp.json ที่กำหนดว่าจะเชื่อมต่อกับเซิร์ฟเวอร์ MCP ลูกใดบ้าง ซึ่งเป็นไปตามรูปแบบการกำหนดค่าไคลเอนต์ MCP มาตรฐาน:
{
"mcpServers": {
"filesystem": {
"command": "npx",
"args": ["-y", "@modelcontextprotocol/server-filesystem", "/tmp"],
"env": {
"DEBUG": "false"
}
},
"github": {
"command": "npx",
"args": ["-y", "@modelcontextprotocol/server-github"],
"env": {
"GITHUB_PERSONAL_ACCESS_TOKEN": "your-token-here"
}
},
"weather": {
"url": "http://localhost:3000/mcp",
"transport": "sse"
}
}
}
ตัวเลือกการกำหนดค่า
แต่ละรายการเซิร์ฟเวอร์รองรับ:
สำหรับการขนส่งแบบ stdio:
command(จำเป็น) - คำสั่งที่จะดำเนินการ (เช่น "node", "python", "npx")args(ไม่บังคับ) - อาร์เรย์ของอาร์กิวเมนต์ที่จะส่งให้คำสั่งenv(ไม่บังคับ) - ตัวแปรสภาพแวดล้อมสำหรับกระบวนการลูก
สำหรับการขนส่งแบบ HTTP/SSE:
url(จำเป็น) - URL ปลายทาง HTTPtransport- ตั้งค่าเป็น "sse" สำหรับ Server-Sent Events
การใช้งาน
การเริ่มต้นเซิร์ฟเวอร์
# Use default config (./mcp.json)
mcpcodeserver
# Use custom config location
mcpcodeserver --config /path/to/custom-mcp.json
# Show help
mcpcodeserver --help
การใช้เป็นเซิร์ฟเวอร์ MCP
กำหนดค่า mcpcodeserver ในไคลเอนต์ MCP ของคุณ (เช่น Claude Desktop, Claude Code, Cline ฯลฯ):
ด้วย npx (แนะนำ - ไม่ต้องติดตั้ง):
{
"mcpServers": {
"codeserver": {
"command": "npx",
"args": ["-y", "mcpcodeserver", "--config", "/path/to/mcp.json"]
}
}
}
จาก GitHub (ใช้งานได้ทันที):
{
"mcpServers": {
"codeserver": {
"command": "npx",
"args": ["-y", "github:zbowling/mcpcodeserver", "--config", "/path/to/mcp.json"]
}
}
}
ด้วยตัวจัดการแพ็คเกจอื่นๆ:
// yarn
{ "command": "yarn", "args": ["dlx", "mcpcodeserver", "--config", "/path/to/mcp.json"] }
// pnpm
{ "command": "pnpm", "args": ["dlx", "mcpcodeserver", "--config", "/path/to/mcp.json"] }
// bun
{ "command": "bunx", "args": ["mcpcodeserver", "--config", "/path/to/mcp.json"] }
ดู examples/ สำหรับตัวอย่างการกำหนดค่าเพิ่มเติมและการตั้งค่าเฉพาะของไคลเอนต์ MCP
เครื่องมือ 1: get_tool_definitions
เครื่องมือนี้ส่งคืนคำจำกัดความประเภท TypeScript สำหรับเครื่องมือทั้งหมดที่ค้นพบจากเซิร์ฟเวอร์ลูก
อินพุต:
include_examples(บูลีน ไม่บังคับ) - ว่าจะรวมตัวอย่างการใช้งานหรือไม่
ตัวอย่าง:
// Call the tool (in your MCP client)
get_tool_definitions({ include_examples: true })
เอาต์พุต: ส่งคืนโค้ด TypeScript พร้อมอินเทอร์เฟซและการประกาศฟังก์ชัน:
/**
* Auto-generated TypeScript definitions for MCP tools
*/
interface ToolResult {
content: Array<{
type: string;
text?: string;
// ...
}>;
isError?: boolean;
}
/**
* Read contents of a file
* Server: filesystem
* Tool: read_file
*/
interface ReadFileParams {
path: string;
}
declare function filesystem_read_file(params: ReadFileParams): Promise<ToolResult>;
// ... more tool definitions
เครื่องมือ 2: generate_and_execute_code
เครื่องมือนี้ดำเนินการโค้ด TypeScript ในแซนด์บ็อกซ์ที่เข้าถึงฟังก์ชันเครื่องมือทั้งหมดที่ค้นพบได้
อินพุต:
code(สตริง จำเป็น) - โค้ด TypeScript/JavaScript ที่จะดำเนินการtimeout(ตัวเลข ไม่บังคับ) - เวลาดำเนินการสูงสุดในหน่วยมิลลิวินาที (ค่าเริ่มต้น: 30000, สูงสุด: 300000)
ตัวอย่าง:
// Call the tool with TypeScript code
generate_and_execute_code({
code: `
// Read multiple files and combine them
const file1 = await filesystem_read_file({ path: "/tmp/file1.txt" });
const file2 = await filesystem_read_file({ path: "/tmp/file2.txt" });
const text1 = file1.content[0].text;
const text2 = file2.content[0].text;
console.log("File 1 length:", text1.length);
console.log("File 2 length:", text2.length);
return {
combined: text1 + text2,
totalLength: text1.length + text2.length
};
`
})
เอาต์พุต:
=== Console Output ===
File 1 length: 42
File 2 length: 38
=== Result ===
{
"combined": "...",
"totalLength": 80
}
สภาพแวดล้อมแซนด์บ็อกซ์
แซนด์บ็อกซ์การดำเนินการ TypeScript มีให้:
ที่มีอยู่:
- ฟังก์ชันเครื่องมือทั้งหมดที่ค้นพบ (เป็นฟังก์ชัน async)
- เมธอดคอนโซล:
console.log(),console.error(),console.warn(),console.info() - โกลบอล JavaScript พื้นฐาน:
Math,JSON,Date,Array,Object,String,Number,Boolean - การรองรับ Promise และ async/await
- การจัดการข้อผิดพลาดด้วย try/catch
- ตัวจับเวลา:
setTimeout,setInterval,clearTimeout,clearInterval
ไม่มี:
- โมดูล Node.js (fs, http, child_process ฯลฯ)
- การเข้าถึงระบบไฟล์ (ยกเว้นผ่านเครื่องมือ MCP)
- การเข้าถึงเครือข่าย (ยกเว้นผ่านเครื่องมือ MCP)
- ข้อมูลกระบวนการ
หมายเหตุด้านความปลอดภัย: นี่ไม่ใช่แซนด์บ็อกซ์ที่ปลอดภัยอย่างสมบูรณ์ บริบท VM ให้การแยกส่วนแต่ไม่สามารถป้องกันได้ทั้งหมด ควรดำเนินการเฉพาะโค้ดที่เชื่อถือได้เท่านั้น
การจัดการข้อผิดพลาด
ข้อผิดพลาดในแซนด์บ็อกซ์จะถูกจับและส่งคืนพร้อมกับ stack traces:
generate_and_execute_code({
code: `
try {
const result = await filesystem_read_file({ path: "/nonexistent" });
return result;
} catch (error) {
console.error("Failed to read file:", error.message);
throw error; // Re-throw to surface to parent
}
`
})
การทดสอบกับ Claude Code
ต้องการลอง mcpcodeserver กับ Claude Code หรือไม่? ใช้การตั้งค่าด้วยคำสั่งเดียว:
./setup-claude-code-test.sh
สิ่งนี้จะสร้างโปรเจกต์ ติดตั้งการพึ่งพาสำหรับการทดสอบ และแสดงให้คุณเห็นอย่างชัดเจนว่าต้องเพิ่มอะไรลงในการกำหนดค่า Claude Code ของคุณ ดู TESTING_WITH_CLAUDE.md สำหรับคำแนะนำโดยละเอียด
การพัฒนา
# Install dependencies
bun install
# Build the project
bun run build
# Watch mode for development
bun run dev
# Run the server
bun start
# Run tests
bun test # All tests
bun run test:unit # Unit tests only
bun run test:integration # Integration tests (requires Python)
# Code quality
bun run lint # Check linting
bun run format # Format code
bun run typecheck # Type checking
โครงสร้างโปรเจกต์
ดู AGENTS.md สำหรับโครงสร้างโปรเจกต์โดยละเอียดและเอกสารประกอบคอมโพเนนต์
กรณีการใช้งาน
การดำเนินการหลายไฟล์
แทนที่จะเรียกใช้เครื่องมือหลายครั้งผ่าน LLM ให้เขียนโค้ด:
const files = ["/tmp/a.txt", "/tmp/b.txt", "/tmp/c.txt"];
const contents = await Promise.all(
files.map(path => filesystem_read_file({ path }))
);
return contents.map(r => r.content[0].text);
การแปลงข้อมูล
ประมวลผลข้อมูลระหว่างการเรียกใช้เครื่องมือโดยไม่ต้องให้ LLM เข้ามาแทรกแซง:
const data = await api_fetch({ url: "https://api.example.com/data" });
const json = JSON.parse(data.content[0].text);
const filtered = json.items.filter(item => item.active);
return filtered.length;
ตรรกะแบบมีเงื่อนไข
ตัดสินใจตามผลลัพธ์ของเครื่องมือ:
const exists = await filesystem_read_file({ path: "/tmp/config.json" });
if (exists.isError) {
console.log("Config doesn't exist, using defaults");
return { source: "defaults" };
} else {
return { source: "file", config: JSON.parse(exists.content[0].text) };
}
การกู้คืนข้อผิดพลาด
จัดการข้อผิดพลาดอย่างสง่างามโดยไม่ยกเลิกเวิร์กโฟลว์ทั้งหมด:
const results = [];
for (const path of ["/tmp/a.txt", "/tmp/b.txt", "/tmp/c.txt"]) {
try {
const content = await filesystem_read_file({ path });
results.push({ path, success: true, data: content });
} catch (error) {
results.push({ path, success: false, error: error.message });
}
}
return results;
การรวมเซิร์ฟเวอร์ MCP ต้นทาง
mcpcodeserver สามารถรวมกับเซิร์ฟเวอร์ MCP ต้นทางอย่างเป็นทางการจาก ที่เก็บเซิร์ฟเวอร์ Model Context Protocol ซึ่งช่วยให้คุณใช้เซิร์ฟเวอร์ MCP จริงที่พร้อมใช้งานจริงร่วมกับเครื่องมือที่กำหนดเองของคุณได้
เซิร์ฟเวอร์ต้นทางที่รองรับ
- filesystem: การดำเนินการระบบไฟล์ (อ่าน เขียน แสดงรายการไดเรกทอรี)
- memory: ที่เก็บคีย์-ค่าในหน่วยความจำ
- sqlite: การดำเนินการฐานข้อมูล SQLite
- github: การรวม GitHub API
- brave-search: ความสามารถในการค้นหาเว็บ
- fetch: ความสามารถในการร้องขอ HTTP
ตัวอย่างการกำหนดค่า
{
"mcpServers": {
"filesystem": {
"command": "npx",
"args": ["-y", "@modelcontextprotocol/server-filesystem", "/tmp"]
},
"memory": {
"command": "npx",
"args": ["-y", "@modelcontextprotocol/server-memory"]
},
"sqlite": {
"command": "npx",
"args": ["-y", "@modelcontextprotocol/server-sqlite", "--db-path", "/tmp/test.db"]
}
}
}
การทดสอบการรวมต้นทาง
โปรเจกต์นี้รวมการทดสอบที่ครอบคลุมสำหรับการรวมเซิร์ฟเวอร์ต้นทาง:
# Run upstream servers integration tests
bun tests/integration/run-upstream-tests.ts
# Or manually test with upstream config
npx mcpcodeserver --config tests/integration/upstream-test-config.json
เวิร์กโฟลว์ข้ามเซิร์ฟเวอร์
ด้วยเซิร์ฟเวอร์ต้นทาง คุณสามารถสร้างเวิร์กโฟลว์ข้ามเซิร์ฟเวอร์ที่ทรงพลัง:
// Store database query results in memory and write to file
const queryResult = await sqlite_execute_sql({
sql: "SELECT COUNT(*) as count FROM users"
});
const count = queryResult.content[0].text;
await memory_create({
key: "user-count",
value: count
});
await filesystem_write_file({
path: "/tmp/user-count.txt",
content: `Total users: ${count}`
});
ข้อจำกัด
- หมดเวลาการดำเนินการ: สูงสุด 5 นาที (กำหนดค่าได้ ค่าเริ่มต้น 30 วินาที)
- หน่วยความจำ: จำกัดโดยบริบท VM ของ Node.js
- ไม่มีสถานะคงอยู่ระหว่างการดำเนินการ
- ไม่สามารถ require/import โมดูลภายนอกได้
- ไม่ใช่แซนด์บ็อกซ์ด้านความปลอดภัย - อย่าเรียกใช้โค้ดที่ไม่น่าเชื่อถือ
การมีส่วนร่วม
ยินดีต้อนรับการมีส่วนร่วม! โปรเจกต์นี้สร้างด้วย:
- TypeScript 5.7+
- Node.js 18+
- MCP TypeScript SDK 1.20+
- Zod สำหรับการตรวจสอบความถูกต้อง
ดู CONTRIBUTING.md สำหรับแนวทางการมีส่วนร่วมโดยละเอียด
การสนับสนุน
หากคุณพบว่าโปรเจกต์นี้มีประโยชน์ ลองเลี้ยงกาแฟฉันสักแก้ว!
ใบอนุญาต
MIT