Skip to main content
Glama
huafua

mcp-simulator

by huafua

MCP Simulator (Node.js MCP Server)

mcp simulator ist ein leichtgewichtiger MCP-Server (Model Context Protocol Server), der auf Node.js basiert. Dieses Projekt verwendet ein Design ohne externe Abhängigkeiten (nur das native http-Modul) und bietet über die modularen McpServer- und McpRegistry-Komponenten dynamische Tool-Registrierung und HTTP-Fernaufrufe (RPC).


🚀 Kernfunktionen

  • Keine externen Abhängigkeiten: Verlässt sich vollständig auf das native http-Modul von Node.js, ohne Frameworks wie express.

  • Neue MCP-Kernarchitektur:

    • McpRegistry: Verwaltet die Tool-Liste und Ausführungslogik (unterstützt synchrone und asynchrone async-Methoden).

    • McpServer: Bietet einen HTTP-POST-basierten Ausführungseinstiegspunkt und eine einheitliche JSON-Antwortkapselung.

  • Einfaches API-Registrierungsdesign: Bietet eine register()-Schnittstelle mit Verkettungsunterstützung; es genügen zwei Parameter – „Tool-Definition" und „Ausführungs-Callback" – für eine einfache Registrierung.

  • Integrierte Tools und Reflexionsmechanismus:

    • Integriertes tool/list zum dynamischen Abfragen aller registrierten Tools.

    • Bietet vollständige Beispiele für synchrone Berechnungen, Textverarbeitung sowie asynchrone (async) simulierte API-Anfragen (fetch-posts).


Related MCP server: Swagger/Postman MCP Server

📁 Dateistruktur

mcp-simulator/
├── mcp.core.js             # 伺服器核心引擎(定義 McpServer 與 McpRegistry 類別)
├── index.js                # 專案主入口(載入核心引擎並註冊具體工具)
├── index.http              # HTTP API 測試腳本(搭配 VS Code REST Client 使用)
├── package.json            # 專案配置文件
└── README.md               # 本專案說明文件

⚙️ Schnellstart

Server starten

Führen Sie im Projektstammverzeichnis den folgenden Befehl aus:

node index.js

Der Server lauscht standardmäßig auf Port 8889 (oder liest die Umgebungsvariable PORT). Nach dem Start zeigt die Konsole Folgendes an:

Server running at 8889

🔌 API-Protokollspezifikation

Alle API-Aufrufe erfolgen über einen einzigen Einstiegspunkt.

  • Anfragemethode: POST

  • Serveradresse: http://localhost:8889

  • Anfrage-Header: Content-Type: application/json

  • Anfrageformat (Payload):

    {
        "name": "要調用的工具名稱",
        "args": {
            "參數鍵": "參數值"
        }
    }

Einheitliche Antwortstruktur (Response)

Nach erfolgreicher Verarbeitung aller Anfragen gibt der Server eine einheitlich gekapselte JSON-Struktur zurück:

{
    "code": 200,
    "message": "success",
    "data": {
        /* 工具回傳的原始結果 */
    }
}

Übersicht der Server-Fehlerstatus

HTTP-Statuscode

Szenario

Antwortinhalt (JSON)

200

Header-Fehler (application/json nicht angegeben)

{"code": 406, "message": "Content-type must be 'application/json'"}

200

JSON-Formatfehler (nicht analysierbar)

{"code": 500, "message": "Request body is not valid format"}

200

Kein Tool-Name angegeben (Feld name fehlt)

{"code": 406, "message": "Name must be provided"}

200

Aufruf eines nicht registrierten Tools

{"code": 200, "message": "success", "data": null}


🛠️ Beispiele für integrierte Methodenaufrufe

Im Folgenden finden Sie tatsächliche Aufrufdaten am Beispiel von localhost:8889:

1. Verfügbare Tool-Liste abrufen (tool/list)

Listet alle im Server registrierten Tool-Definitionen auf.

  • Anfrage-Payload: {"name": "tool/list", "args": {}}

  • Antwortbeispiel:

    {
        "code": 200,
        "message": "success",
        "data": [
            { "name": "info", "description": "..." },
            {
                "name": "hello",
                "description": "just say hello to someone",
                "args": { "username": "string" }
            },
            {
                "name": "calculate",
                "description": "calculate sum of two numbers",
                "args": { "a": "number", "b": "number" }
            },
            {
                "name": "fetch-posts",
                "description": "fetch posts from https://jsonplaceholder.typicode.com/posts"
            }
        ]
    }

2. Summe zweier Zahlen berechnen (calculate)

  • Anfrage-Payload: {"name": "calculate", "args": {"a": 20, "b": 30}}

  • Antwortbeispiel:

    {
        "code": 200,
        "message": "success",
        "data": { "result": 50 }
    }

3. Asynchroner Anfragentest (fetch-posts)

Demonstriert die Verwendung von async-Callback-Funktionen und gibt eine Reihe von Beispieldaten von Benutzern zurück (Array).

  • Anfrage-Payload: {"name": "fetch-posts"}

  • Antwortbeispiel:

    {
        "code": 200,
        "message": "success",
        "data": [
            {
                "id": 1,
                "name": "Leanne Graham",
                "username": "Bret",
                "email": "Sincere@april.biz"
                // ... (其他資料略)
            }
        ]
    }

📝 Entwicklung und Erweiterung benutzerdefinierter Tools

Sie können index.js ändern und Ihre Tools über verkettete .register()-Aufrufe hinzufügen.

API-Signatur

server.register(toolDefinition, callback);
  • toolDefinition (Object): Muss name enthalten und kann optional description und args (Parameterdefinitionen) bereitstellen.

  • callback (Function / Async Function): Der Callback, der beim Empfang einer Anfrage ausgeführt wird. Erhält ein einzelnes Objektargument aus req.params.args.

Registrierungsbeispiel

const { McpServer } = require("./mcp.core");

new McpServer(8889)
    // 註冊一個需要參數的非同步工具
    .register(
        {
            name: "get_user",
            description: "獲取特定使用者資料",
            args: { userId: "number" },
        },
        async ({ userId }) => {
            // ⚠️ 必須使用物件解構讀取參數
            const user = await database.find(userId);
            return { result: user };
        },
    )
    .start();

💡 Wichtige Hinweise für die Entwicklung:

  1. Parameterempfang: Da die vom Client gesendeten args als einzelnes Objekt an die Callback-Funktion übergeben werden, müssen Sie bei mehreren definierten Parametern unbedingt Objektdestrukturierung mit { param1, param2 } in der Callback-Funktion verwenden.

  2. Asynchrone Unterstützung: McpRegistry führt Tools intern mit await aus. Sie können in der Callback-Funktion bedenkenlos async/await für Datenbankabfragen oder Netzwerkanfragen verwenden.


📄 Lizenz

Dieses Projekt ist unter den Bedingungen der MIT License als Open Source lizenziert.

F
license - not found
Not graded
quality - not tested
C
maintenance

Maintenance

0Releases (12mo)
Commit activity

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Connectors

Related MCP Servers

  • A
    license
    B
    quality
    D
    maintenance
    A lightweight, modular API service that provides useful tools like weather, date/time, calculator, search, email, and task management through a RESTful interface, designed for integration with AI agents and automated workflows.
    5
    1
    MIT
  • F
    license
    Not graded
    quality
    D
    maintenance
    Server that ingests Swagger/OpenAPI specifications and Postman collections, providing just 4 strategic tools that allow AI agents to dynamically discover and interact with APIs instead of generating hundreds of individual tools.
    3
  • A
    license
    Not graded
    quality
    D
    maintenance
    A lightweight Node.js-based MCP server that exposes custom tools via HTTP and Server-Sent Events (SSE) for clients like Postman. It allows users to register tools with type-safe validation to establish bidirectional communication with MCP clients.
    2,013
    1
    MIT
  • F
    license
    Not graded
    quality
    D
    maintenance
    A modular server for managing and registering tools, enabling extensible functionality through tool registration and configuration.

View all related MCP servers

Latest Blog Posts

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/huafua/mcp-simulator'

If you have feedback or need assistance with the MCP directory API, please join our Discord server