सामग्री पर जाएँ

असिस्टेंट के लिए Signal Lab: signallab mcp ​

signallab mcp एक Model Context Protocol सर्वर है। Claude Code, Claude Desktop, Cursor, VS Code या किसी भी दूसरे MCP क्लाइंट में मौजूद असिस्टेंट इसे शुरू करता है और फिर:

  • जान सकता है कि प्रयोग किन चीज़ों से बनता है, एक प्रयोग लिख सकता है, उसे जाँच सकता है, चला सकता है और चरण-दर-चरण पढ़ सकता है कि वह क्यों विफल हुआ;
  • एक OSC संदेश, डेटाग्राम, HTTP रिक्वेस्ट, WebSocket संदेश या MQTT पब्लिश भेज सकता है, और किसी पोर्ट पर सुन सकता है कि कोई डिवाइस क्या भेजता है;
  • आपकी लाइब्रेरी का कोई सिग्नल भेज सकता है;
  • किसी डिपेंडेंसी की भूमिका निभा सकता है — HTTP API, OSC, UDP या TCP डिवाइस, MQTT ब्रोकर — और पढ़ सकता है कि आपके सिस्टम ने उसे क्या भेजा;
  • पिछले रन फिर से पढ़ सकता है और उनमें से दो की तुलना कर सकता है।

हर क्रिया उन्हीं इंजन कमांड से होकर जाती है जिनका ऐप उपयोग करता है, इसलिए असिस्टेंट जो प्रयोग चलाता है, वह वही रन है जो ऐप बनाता, उसी रिपोर्ट के साथ, और हर विफलता उन्हीं शब्दों में बताई जाती है जिनमें इंटरफ़ेस बताता है।

WARNING

भेजना, रन और एमुलेटर नेटवर्क पर असली ट्रैफ़िक डालते हैं। असिस्टेंट को बताएँ कि किन डिवाइस से बात करना आपके अधिकार में है; साथ आने वाले टेम्पलेट लूपबैक (127.0.0.1) की ओर इशारा करते हैं।

इसे सेट अप करना ​

signallab डेस्कटॉप ऐप के साथ आता है और उसे इंस्टॉल करने के बाद आपके PATH में होता है (देखें इंस्टॉल करना)। क्लाइंट signallab mcp को ख़ुद शुरू करता है और stdin और stdout पर उससे बात करता है; आप इसे हाथ से नहीं चलाते।

--print-config वह छापता है जो क्लाइंट को चाहिए, इस signallab के पूरे पथ के साथ:

कमांडयह क्या छापती है
signallab mcp --print-config claude-codeclaude mcp add कमांड लाइन।
signallab mcp --print-config claude-desktopClaude Desktop की कॉन्फ़िगरेशन फ़ाइल के लिए mcpServers प्रविष्टि।
signallab mcp --print-config cursorवही mcpServers प्रविष्टि, Cursor की mcp.json के लिए।
signallab mcp --print-config vscodeVS Code की .vscode/mcp.json के लिए servers प्रविष्टि।

लैब सर्वर पर काम करने वाले असिस्टेंट के लिए --server URL जोड़ें: तब छपी हुई कॉन्फ़िगरेशन में यह होता है, टोकन के लिए एक प्लेसहोल्डर के साथ।

Claude Code ​

--print-config claude-code जो पंक्ति छापता है, उसे चलाएँ, उदाहरण के लिए:

bash
claude mcp add signallab -- "C:\Program Files\Signal Lab\signallab.exe" mcp

Claude Desktop और Cursor ​

प्रविष्टि को क्लाइंट की कॉन्फ़िगरेशन में रखें — Claude Desktop के लिए claude_desktop_config.json; Cursor के लिए mcp.json — और क्लाइंट को रीस्टार्ट करें:

json
{
  "mcpServers": {
    "signallab": {
      "command": "C:\\Program Files\\Signal Lab\\signallab.exe",
      "args": ["mcp"],
      "env": {}
    }
  }
}

VS Code ​

json
{
  "servers": {
    "signallab": {
      "type": "stdio",
      "command": "/usr/bin/signallab",
      "args": ["mcp"],
      "env": {}
    }
  }
}

दूसरे क्लाइंट ​

stdio सर्वर शुरू करने वाला कोई भी क्लाइंट इसी तरह काम करता है: कमांड signallab (या उसका पूरा पथ) है, आर्ग्युमेंट mcp और कोई भी विकल्प। Linux पर सर्वर इमेज भी कमांड का काम कर सकती है:

bash
docker run -i --rm --network host --entrypoint signallab ghcr.io/proanima/signallab:1.0.0 mcp

विकल्प ​

विकल्पयह क्या करता हैडिफ़ॉल्ट
--server URLप्रयोग, भेजना और एमुलेटर इस Signal Lab सर्वर पर चलाएँ (देखें लैब सर्वर पर)।SIGNALLAB_SERVER
--token-file PATHसर्वर का टोकन रखने वाली फ़ाइल।SIGNALLAB_TOKEN_FILE, वरना SIGNALLAB_TOKEN
--data-dir PATHरन और उनकी रिपोर्ट कहाँ रखी जाती हैं। --server के साथ नहीं।ऐप का डेटा फ़ोल्डर (Documents/SignalLab)
--library PATHlist_signals और fire_signal के लिए सिग्नल लाइब्रेरी।ऐप की signals.json
--emulators PATHlist_emulators और start_emulator के लिए एमुलेटर लाइब्रेरी।ऐप की emulators.json
--secrets files|systemइस मशीन पर रन के लिए सीक्रेट मान कहाँ से आते हैं, जैसे run में। --server के साथ नहीं।files
--secrets-dir PATHसीक्रेट फ़ाइलों का फ़ोल्डर, हर नाम के लिए एक। --server के साथ नहीं।/run/secrets/signallab, अगर मौजूद हो
--lang <code>परिणामों और विफलताओं की भाषा।SIGNALLAB_LANG, वरना लोकेल, वरना en
--print-config CLIENTकिसी क्लाइंट की कॉन्फ़िगरेशन छापें और बाहर निकलें: claude-code, claude-desktop, cursor या vscode।

रन अपनी रिपोर्ट ऐप के डेटा फ़ोल्डर में रखते हैं, जहाँ ऐप अपनी रखता है, इसलिए वे सेशन के बाद भी बनी रहती हैं।

टूल ​

जो टूल केवल पढ़ते हैं, उन पर read-only का निशान होता है, ताकि क्लाइंट उन्हें बिना पूछे चलने दे सके। जो टूल बाहरी दुनिया तक पहुँचते हैं — कुछ भेजते हैं, सुनते हैं या शुरू करते हैं — उन पर भी इसका निशान होता है, और क्लाइंट हर कॉल से पहले आपसे पूछ सकता है। किसी पर भी destructive का निशान नहीं है।

टूलयह क्या करता हैबाहरी दुनिया तक पहुँचता है
describe_nodesप्रयोग दस्तावेज़, हर तरह का नोड अपने फ़ील्ड, आउटपुट और एक उदाहरण के साथ, {{template}} भाषा, लोड प्रोफ़ाइल और एमुलेटर दस्तावेज़।नहीं
list_templatesसाथ आने वाले प्रयोग, उनके पैरामीटर के साथ।नहीं
get_templateसाथ आने वाला एक प्रयोग, दस्तावेज़ के रूप में।नहीं
validate_experimentप्रयोग को वैसे ही जाँचता है जैसे एडिटर रन से पहले जाँचता है; कुछ नहीं भेजता।नहीं
run_experimentप्रयोग को अंत तक चलाता है और हर चरण की रिपोर्ट देता है।हाँ
send_oscएक OSC संदेश।हाँ
send_udpएक UDP डेटाग्राम।हाँ
send_httpएक HTTP रिक्वेस्ट।हाँ
send_mqttएक MQTT 3.1.1 पब्लिश।हाँ
send_wsएक WebSocket आदान-प्रदान।हाँ
listenकुछ देर तक किसी UDP पोर्ट पर क्या आता है।हाँ
list_signalsआपकी लाइब्रेरी के सिग्नल।नहीं
fire_signalलाइब्रेरी का कोई सिग्नल भेजता है।हाँ
list_emulatorsआपकी लाइब्रेरी के एमुलेटर।नहीं
start_emulatorकोई एमुलेटर शुरू करता है।हाँ
emulator_exchangesचल रहे एमुलेटर को क्या मिला और उसने क्या जवाब दिया।नहीं
set_emulator_downचल रहे एमुलेटर को बंद करता है, या वापस चालू करता है।हाँ
list_runsपिछले रन की रिपोर्ट।नहीं
compare_runsदो रन, आमने-सामने।नहीं
list_jobsक्या चल रहा है।नहीं
stop_jobचल रहा जॉब रोकता है।हाँ

प्रयोग ​

प्रयोग लिखने से पहले असिस्टेंट describe_nodes पढ़ता है; यह signallab nodes जैसा ही है। list_templates और get_template चलाने या ढालने के लिए काम करने वाले उदाहरण देते हैं।

validate_experiment और run_experiment प्रयोग को तीन में से किसी एक तरीके से लेते हैं — ठीक एक से:

आर्ग्युमेंटयह क्या है
documentप्रयोग दस्तावेज़, जैसा ऐप उसे सहेजता है।
fileउस मशीन पर प्रयोग फ़ाइल का पथ, जिस पर signallab चलता है।
templateसाथ आने वाले किसी टेम्पलेट का नाम।
paramsइस रन के लिए पैरामीटर मान: {"name": "value"}; संख्याएँ और बूलियन टेक्स्ट के रूप में लिए जाते हैं।
profileदस्तावेज़ की इस प्रोफ़ाइल के साथ चलाएँ; डिफ़ॉल्ट के लिए ""।
seedrun_experiment: रैंडम मानों का सीड।
timeoutrun_experiment: रन को कितने सेकंड लग सकते हैं, 1 से 300 (डिफ़ॉल्ट 300)।

run_experiment रन समाप्त होने पर जवाब देता है: सफल, विफल या रोका गया, उसकी अवधि और सीड, हर चरण और उसने क्या किया या वह क्यों विफल हुआ, हर एमुलेटर से क्या माँगा गया, हर बाधा रिले ने क्या किया, और रिपोर्ट का पथ। विफल होने वाला रन एक सामान्य जवाब है — चरण बताते हैं कि क्यों — कोई विफल कॉल नहीं।

अकेले संदेश ​

टूलआर्ग्युमेंट
send_osctarget (host:port), address, args: संख्याएँ (पूर्णांक → int32, या उसकी सीमा से बाहर int64; वरना float32), स्ट्रिंग, बूलियन, null, या {"type": "int"|"float"|"str"|"long"|"double"|"bool"|"blob"|"nil", "value": …}।
send_udptarget, और text या hex ("de ad be ef")।
send_httpmethod, url, headers ({"Name": "value"}), body, timeout_ms (डिफ़ॉल्ट 10000), auth: {"scheme": "basic"|"digest", "username", "password"} या {"scheme": "bearer", "token"}। स्टेटस, समय, हेडर और बॉडी — उसके पहले 16 KiB — लौटाता है।
send_mqttbroker (host:port, पोर्ट न हो तो 1883), topic, payload, qos (0, 1 या 2), retain। retain के साथ ख़ाली पेलोड retained मान साफ़ करता है।
send_wsurl (ws:// या wss://), text या hex, headers, protocols, और जवाब की प्रतीक्षा के लिए expect (शामिल है), expect_regex या wait (कोई भी संदेश); timeout_ms 1 से 120000 (डिफ़ॉल्ट 2000)। हैंडशेक, जो भेजा गया और जवाब लौटाता है, JSON होने पर उसे पार्स करके।

ये वही कमांड हैं जिनका ऐप की स्क्रीन उपयोग करती हैं; देखें signallab send।

सुनना ​

listen कुछ देर के लिए उस मशीन पर जिस पर signallab mcp चलता है एक UDP पोर्ट खोलता है, और जो आया उसे लौटाता है: OSC संदेश डिकोड करके, बाकी डेटाग्राम टेक्स्ट और hex के रूप में।

आर्ग्युमेंटयह क्या हैडिफ़ॉल्ट
bindIP:port, जैसे 0.0.0.0:9000।ज़रूरी
protocolosc या udp।osc
secondsकितनी देर सुनना है, 0.1 से 60।5
maxइतने डेटाग्राम के बाद रुकें, 1 से 1000।100

जब 0.0.0.0 पर कुछ नहीं आता, तो जवाब असिस्टेंट को फ़ायरवॉल जाँचने की याद दिलाता है (signallab doctor)। --server के साथ listen अस्वीकार किया जाता है: सर्वर पर, प्रतीक्षा नोड वाला प्रयोग वहीं सुनता है।

सिग्नल और एमुलेटर ​

list_signals और fire_signal आपकी सिग्नल लाइब्रेरी का उपयोग करते हैं — ऐप की signals.json, --library, या कॉल को दिया गया library पथ। सिग्नल उसकी id या नाम से भेजा जाता है, ठीक वैसे ही जैसे ऐप उसे भेजता है।

list_emulators आपकी लाइब्रेरी के एमुलेटर के नाम बताता है। start_emulator एक शुरू करता है — emulator में दस्तावेज़, या name में लाइब्रेरी प्रविष्टि की id या नाम — और उसकी जॉब id और पता लौटाता है; यह stop_job तक अपने नियमों से जवाब देता है। bind उसे दूसरे IP:port पर ले जाता है, params वे मान देता है जिन्हें उसके टेम्पलेट पढ़ते हैं, seed उसके रैंडम चुनाव तय करता है। emulator_exchanges (job_id, और केवल नए आदान-प्रदान के लिए after) बताता है कि क्या आया और हर नियम ने क्या जवाब दिया। set_emulator_down (job_id, down, और fault: unavailable, reset या timeout) चल रहे एमुलेटर का प्लग तब तक खींच देता है जब तक उसे फिर से चालू न किया जाए: HTTP को फ़ॉल्ट मिलता है (unavailable का जवाब 503 है), TCP डिवाइस और MQTT ब्रोकर कनेक्शन तोड़ देते हैं, OSC और UDP कोई जवाब नहीं देते। देखें एमुलेटर।

रन और जॉब ​

list_runs पिछले रन की रिपोर्ट पढ़ता है, सबसे नई सबसे पहले — जब experiment किसी प्रयोग का नाम दे, तो केवल उसकी, अधिकतम limit (1 से 500, डिफ़ॉल्ट 50) — हर लोड चरण के आँकड़ों के साथ। compare_runs उनमें से दो के नाम लेता है, a (पहले) और b (बाद में), और हर लोड चरण की लेटेंसी, त्रुटि दर, हासिल की गई दर और छूटी रिक्वेस्ट को आमने-सामने रखता है, और ग़लत दिशा में 5 % या उससे अधिक के बदलाव को रिग्रेशन के रूप में चिह्नित करता है। देखें रन और रिपोर्ट।

list_jobs बताता है कि क्या चल रहा है — मॉनिटर, जनरेटर, एमुलेटर, रन — और stop_job किसी एक को उसकी id से रोकता है।

परिणाम और त्रुटियाँ ​

हर जवाब मॉडल के लिए टेक्स्ट होता है और वही संरचित डेटा के रूप में भी। विफलता पर त्रुटि का निशान होता है और उसमें इंजन की त्रुटि होती है — एक स्थिर code, उसके मान, वह नोड और फ़ील्ड जिसके बारे में वह है — जिसे --lang से चुनी गई भाषा में लिखा जाता है। जो आर्ग्युमेंट असिस्टेंट ने ग़लत दिए, वे ऐसे शब्दों में लौटते हैं जिनसे वह उन्हें सुधार सके।

प्रगति और रद्द करना ​

जब क्लाइंट run_experiment पर प्रगति माँगता है, तो हर चरण होते ही बताया जाता है (नोड और उसकी स्थिति), ताकि असिस्टेंट — और आप — रन को आगे बढ़ते देख सकें। कॉल रद्द करने से वह रुक जाती है; run_experiment रद्द करने से रन ही रुक जाता है, जैसे ऐप में रोकें करता है।

जब क्लाइंट कनेक्शन बंद करता है, तो जो कॉल अभी चल रही हैं वे पूरी होती हैं, फिर signallab mcp बाहर निकल जाता है।

लैब सर्वर पर ​

--server http://192.0.2.10:1430 के साथ प्रयोग, भेजना, सिग्नल और एमुलेटर उस सर्वर पर होते हैं, उसके API के ज़रिए — उसके नेटवर्क, उसके सीक्रेट और उसके डेटा फ़ोल्डर के साथ — ताकि असिस्टेंट उन उपकरणों तक पहुँचे जिन तक केवल लैब पहुँच सकती है। टोकन क्लाइंट के एनवायरनमेंट में दें:

json
{
  "mcpServers": {
    "signallab": {
      "command": "signallab",
      "args": ["mcp", "--server", "http://192.0.2.10:1430"],
      "env": { "SIGNALLAB_TOKEN": "<the server's token>" }
    }
  }
}

इस मशीन पर क्या रहता है: सिग्नल और एमुलेटर लाइब्रेरी (ऐप की, या --library और --emulators) और किसी कॉल में नामित फ़ाइलें (file, library) यहीं पढ़ी जाती हैं, और उनमें जो है वह सर्वर को भेजा जाता है; listen अस्वीकार किया जाता है। देखें Signal Lab को सर्वर के रूप में चलाना।

सुरक्षा ​

  • असिस्टेंट केवल वही कर सकता है जो टूल करते हैं, और हर टूल ऐप की अपनी कमांड में से एक है: वह ऐसी किसी चीज़ तक नहीं पहुँच सकता जहाँ तक ऐप नहीं पहुँच सकता।
  • जो टूल कुछ भेजते हैं, सुनते हैं या शुरू करते हैं, उन पर बाहरी दुनिया तक पहुँचने का निशान होता है; आपका क्लाइंट तय करता है कि हर कॉल से पहले आपसे पूछे या नहीं।
  • सीक्रेट मान कभी असिस्टेंट तक नहीं पहुँचते: प्रयोग उन्हें {{secret.NAME}} के रूप में नाम देता है, और हर परिणाम में उनकी जगह •••• दिखता है।
  • एमुलेटर या लिसनर उस मशीन पर पोर्ट खोलता है जिस पर वह चलता है; list_jobs और stop_job दिखाते और समाप्त करते हैं कि अभी भी क्या चल रहा है।

प्रोटोकॉल ​

क्लाइंट लिखने वालों के लिए: stdio पर JSON-RPC 2.0, हर पंक्ति में एक संदेश; stdout पर केवल प्रोटोकॉल संदेश होते हैं, और किसी व्यक्ति के लिए कुछ भी stderr पर जाता है। प्रोटोकॉल संस्करण 2025-06-18, 2025-03-26 और 2024-11-05 (क्लाइंट कोई और माँगे, तो सबसे नया), बैच, ping, tools/list और tools/call; progressToken भेजने वाली कॉल के लिए प्रगति notifications/progress के रूप में, और रद्द करना notifications/cancelled से। सर्वर के instructions मॉडल को बताते हैं कि टूल आपस में कैसे जुड़ते हैं।