**अपने MCP सर्वर को असली प्रोटोकॉल के विरुद्ध टेस्ट करें। कोई mock नहीं। कोई import नहीं। किसी भाषा से बंधन नहीं।**
mcp-assert आपके सर्वर से ठीक वैसे ही कनेक्ट होता है जैसे Claude, Cursor या कोई भी MCP क्लाइंट करता है: असली stdio/SSE/HTTP ट्रांसपोर्ट, पूरा initialize handshake, वास्तविक टूल कॉल। यह प्रतिक्रियाओं को उन अपेक्षाओं के विरुद्ध जाँचता है जिन्हें आप YAML में परिभाषित करते हैं। अगर यह mcp-assert पास कर लेता है, तो यह हर MCP क्लाइंट के साथ काम करता है।
> [!WARNING]
> हमने 102 MCP सर्वर स्कैन किए और AWS, Serena और Grafana समेत 55 सर्वरों में **4,794 schema समस्याएँ** (2,239 errors) पाईं। सबसे आम विफलता: पैरामीटरों में टाइप परिभाषाएँ न होने से agent गलत मान प्रकार भेजते हैं। देखें [scorecard](https://blackwell-systems.github.io/mcp-assert/scorecard/)।
```
Your YAML ──→ mcp-assert ──→ MCP Server
(inputs + assertions) (client) (any language)
│
Pass / Fail
```
### आपका सर्वर फ़र्क नहीं बता पाएगा
mcp-assert पूरा MCP प्रोटोकॉल बोलता है: initialize handshake, `tools/list` से खोज, असली आर्ग्युमेंट्स के साथ `tools/call`। यह ऐसे bug खोजता है जो यूनिट टेस्ट छोड़ देते हैं, क्योंकि यह प्रोसेस के भीतर नहीं, बल्कि वायर पर टेस्ट करता है।
### उत्पादन में अपनाया गया
- **[Wyre Technology](https://github.com/wyre-technology)**: `mcp-assert-action` का उपयोग करते हुए साझा baseline वर्कफ़्लो के ज़रिए 25 MCP सर्वर टेस्ट किए गए
- **[Ant Group (AntV)](https://github.com/antvis/mcp-server-chart)**: लॉन्च के 3 दिनों के भीतर CI में एकीकृत
- **[Vera](https://github.com/aallan/vera)**: प्रोजेक्ट रोडमैप पर अनुशंसित टेस्ट harness ([#529](https://github.com/aallan/vera/issues/529))
- **मर्ज किए गए Fix PR**: Google, Grafana, LangChain, आधिकारिक MCP SDK
MCP के लिए टेस्टिंग मानक, जैसे Python के लिए pytest या JavaScript के लिए Jest।
इसे किसी भी MCP सर्वर प्रोजेक्ट में एक ही लाइन में जोड़ें:
```yaml
- uses: blackwell-systems/mcp-assert-action@v1
with:
suite: evals/
```
> [!NOTE]
> LLM व्यक्तिपरक आउटपुट के लिए हैं। Assertions नियतात्मक आउटपुट के लिए हैं। अधिकांश MCP टूल नियतात्मक होते हैं। mcp-assert उन्हें कवर करता है।
## इंस्टॉल
```bash
# npm (no Go required)
npx @blackwell-systems/mcp-assert
# pip (no Go required)
pip install mcp-assert
# Go
go install github.com/blackwell-systems/mcp-assert/cmd/mcp-assert@latest
# Homebrew
brew install blackwell-systems/tap/mcp-assert
# Docker
docker run blackwellsystems/mcp-assert audit --server "npx my-server"
# Snap (Linux)
sudo snap install mcp-assert --classic
# Scoop (Windows)
scoop bucket add blackwell-systems https://github.com/blackwell-systems/scoop-bucket
scoop install mcp-assert
# Winget (Windows)
winget install BlackwellSystems.mcp-assert
# curl | sh (macOS / Linux)
curl -fsSL https://raw.githubusercontent.com/blackwell-systems/mcp-assert/main/install.sh | sh
```
## त्वरित शुरुआत
### किसी भी MCP सर्वर का सेकंडों में ऑडिट करें। कोई सेटअप नहीं।
इसे किसी भी सर्वर की ओर इंगित करें:
```bash
mcp-assert audit --server "npx my-mcp-server"
```
```
Server: my-server
Transport: stdio
Score: 83%
✓ read_query 1ms [E000] responds, returns content
✗ create_table 0ms [E201] internal error: panic: nil pointer...
✓ list_tables 1ms [E000] responds, returns content
3 tools tested, 2 healthy, 1 crashed
```
संरचित एरर कोड समस्याओं को तुरंत वर्गीकृत कर देते हैं। सभी 24 कोड के लिए देखें [Error Reference](../../docs/ERROR_REFERENCE.md)।
> [!TIP]
> ऑडिट कनेक्ट होता है, `tools/list` के ज़रिए हर टूल की खोज करता है, schema से बने इनपुट के साथ हर टूल को कॉल करता है, और रिपोर्ट करता है कि कौन-से टूल क्रैश होते हैं बनाम कौन-से एरर को सही तरह से संभालते हैं। कोई YAML की ज़रूरत नहीं। और गहराई में जाने के लिए, assertion फ़ाइलें जेनरेट करें और उन्हें कस्टमाइज़ करें:
```bash
# Audit + generate starter YAML for CI
mcp-assert audit --server "npx my-mcp-server" --output evals/
# Edit the generated YAMLs: add expected content, setup steps, multi-step flows
# Run in CI with regression detection
mcp-assert ci --suite evals/ --threshold 95
```
### शून्य से assertions लिखें
```bash
# Scaffold your first assertion
mcp-assert init evals # Or: init evals --server "my-server" for auto-generation
# Run it
mcp-assert run --suite evals/ --fixture evals/fixtures
```
पूरे walkthrough के लिए देखें [Getting Started guide](https://blackwell-systems.github.io/mcp-assert/getting-started/)।
### पहले से Vitest, Jest, Bun, PHPUnit या pytest का उपयोग कर रहे हैं?
```bash
# Vitest
npm install -D @blackwell-systems/vitest-mcp-assert
```
```ts
// mcp.test.ts
import { describeMcpSuite } from '@blackwell-systems/vitest-mcp-assert'
describeMcpSuite('mcp server', 'evals/')
```
```bash
# pytest
pip install pytest-mcp-assert
pytest --mcp-suite evals/
```
> [!IMPORTANT]
> वही YAML फ़ाइलें CLI, Vitest, Jest, Bun, PHPUnit, pytest और Go test में एक जैसी काम करती हैं। कोई migration नहीं। एक बार लिखें, कहीं भी चलाएँ।
## आप जो कुछ भी कर सकते हैं
| कमांड | यह क्या करता है | ज़रूरी सेटअप |
|---------|-------------|----------------|
| `audit --server "..."` | किसी भी सर्वर को स्कैन करें, हर टूल को स्वस्थ/क्रैश/टाइम-आउट के रूप में वर्गीकृत करें | कोई नहीं |
| `fuzz --server "..."` | हर टूल पर विरोधात्मक इनपुट फेंकें, क्रैश और हैंग खोजें | कोई नहीं |
| `init --server "..."` | tools/list से एक पूरा टेस्ट सूट जेनरेट करें + स्नैपशॉट कैप्चर करें | कोई नहीं |
| `run --suite evals/` | YAML assertions चलाएँ, pass/fail रिपोर्ट करें | YAML फ़ाइलें |
| `ci --suite evals/` | thresholds, baselines, JUnit XML, GitHub Step Summary के साथ चलाएँ | YAML फ़ाइलें |
| `coverage --suite evals/ --server "..."` | रिपोर्ट करें कि किन टूल में assertions हैं और किनमें नहीं | YAML फ़ाइलें |
| `snapshot --suite evals/ --update` | रिग्रेशन डिटेक्शन के लिए प्रतिक्रियाओं को golden files के रूप में कैप्चर करें | YAML फ़ाइलें |
| `watch --suite evals/` | YAML बदलावों पर फिर से चलाएँ, स्थिति पलटने पर diff दिखाएँ | YAML फ़ाइलें |
| `matrix --languages go:gopls,ts:tsserver` | कई language servers पर एक ही सूट | YAML फ़ाइलें |
| `intercept --server "..." --trajectory t.yaml` | agent और सर्वर के बीच प्रॉक्सी करें, live टूल कॉल ट्रेस कैप्चर करें | Trajectory YAML |
| `lint --server "..."` | agent उपयोगिता के लिए 24 स्टैटिक विश्लेषण नियम; `--fix` स्वतः schema सुधार जेनरेट करता है | कोई नहीं |
`audit` (शून्य सेटअप) से शुरू करें, फिर `fuzz` (विरोधात्मक टेस्टिंग), फिर `init` (सब कुछ जेनरेट करता है), फिर अपने विशिष्ट assertions के लिए YAML को कस्टमाइज़ करें।
## शून्य-प्रयास कवरेज
```bash
# Generate stub assertions for every tool the server exposes
mcp-assert generate --server "my-mcp-server" --output evals/ --fixture ./fixtures
# Capture actual outputs as snapshots
mcp-assert snapshot --suite evals/ --server "my-mcp-server" --update
# Assert nothing changed
mcp-assert run --suite evals/ --server "my-mcp-server"
```
## Lint + ऑटो-फ़िक्स
स्टैटिक विश्लेषण टूल को चलाए बिना schema समस्याएँ पकड़ता है। 24 नियम उन समस्याओं का पता लगाते हैं जिनसे agent विफल होते हैं:
```bash
mcp-assert lint --server "npx my-mcp-server"
```
```
E E103 create_entities Required parameter "entities" has no description
W W114 generate_chart Input schema is 5 levels deep. LLMs struggle with nesting
W W112 (server) Server exposes 27 tools. LLM accuracy degrades beyond 20
5 error(s), 11 warning(s)
```
फ़िक्स स्वतः जेनरेट करें:
```bash
mcp-assert lint --server "npx my-mcp-server" --fix
```
```
memory-server: 9 tools, 25 findings, 23 auto-fixable
E103 create_entities Add description: "The entities value (array)"
W109 search_nodes Add examples to "query": [search term]
W116 read_graph Append: "Returns the graph data as JSON."
23 fixes generated.
```
चेतावनियों पर विफल होने के लिए CI में `--strict` का उपयोग करें:
```bash
mcp-assert lint --server "..." --strict --threshold 0
```
## यह LLM-as-Judge फ़्रेमवर्क से किस तरह भिन्न है
नियतात्मक टूल के लिए mcp-assert बेहतर उपयुक्त है। व्यक्तिपरक आउटपुट के लिए LLM-as-judge फ़्रेमवर्क सही विकल्प बने रहते हैं। अगर आपका सर्वर टूल प्रकारों को मिलाता है तो दोनों का उपयोग करें।
| आयाम | LLM-as-judge eval फ़्रेमवर्क | mcp-assert |
|---|---|---|
| किसके लिए सर्वोत्तम | व्यक्तिपरक आउटपुट (गद्य, रचनात्मक सामग्री) | नियतात्मक आउटपुट (डेटा, स्थिति, सत्यापन) |
| ग्रेडिंग | भाषा मॉडल स्कोरिंग (लचीली, महँगी) | assertion-आधारित (सटीक, मुफ़्त) |
| गति | प्रति टेस्ट सेकंड (LLM राउंड-ट्रिप) | प्रति टेस्ट मिलीसेकंड (कोई LLM नहीं) |
| CI लागत | हर रन पर API कॉल | शून्य बाहरी निर्भरताएँ |
| विश्वसनीयता | मापी नहीं गई | प्रति assertion pass@k / pass^k |
| रिग्रेशन | समर्थित नहीं | baseline तुलना, पीछे खिसकने पर विफल |
| बहु-भाषा | समर्थित नहीं | N language servers पर एक ही assertion |
## टेस्ट बस लिख क्यों न लें?
आपको MCP प्रोटोकॉल bootstrapping, एक सर्वर-अज्ञेय रनर (आपके Go टेस्ट आपके TypeScript सर्वर को टेस्ट नहीं कर सकते), और eval सुविधाएँ (रिग्रेशन डिटेक्शन, Docker आइसोलेशन, JUnit आउटपुट) चाहिए होंगी। mcp-assert यह सब संभालता है। एक YAML फ़ाइल, कोई भी सर्वर, कोई भी भाषा।
## CI एकीकरण
शून्य-सेटअप CI के लिए [mcp-assert GitHub Action](https://github.com/blackwell-systems/mcp-assert-action) का उपयोग करें:
```yaml
- uses: blackwell-systems/mcp-assert-action@v1
with:
suite: evals/
threshold: 95
```
बाइनरी डाउनलोड करता है, assertions चलाता है, JUnit XML परिणाम अपलोड करता है, GitHub Step Summary लिखता है। आपके runners पर Go toolchain की ज़रूरत नहीं।
या सीधे चलाएँ:
```bash
mcp-assert ci --suite evals/ --threshold 95 --junit results.xml
```
JUnit XML, markdown सारांश, बैज और रिग्रेशन डिटेक्शन के लिए देखें [CI Integration guide](https://blackwell-systems.github.io/mcp-assert/ci-integration/)।
## pytest एकीकरण
mcp-assert assertions को pytest टेस्ट आइटम के रूप में चलाएँ:
```bash
pip install pytest-mcp-assert
pytest --mcp-suite evals/
```
हर YAML फ़ाइल pass/fail/skip सेमांटिक्स के साथ एक pytest Item बन जाती है। `pyproject.toml` के ज़रिए कॉन्फ़िगर करें:
```toml
[tool.pytest.ini_options]
mcp_suite = "evals/"
mcp_fixture = "fixtures/"
```
फिर बस `pytest` चलाएँ। सभी विकल्पों के लिए `pytest-plugin/README.md` देखें।
## Vitest एकीकरण
mcp-assert assertions को Vitest टेस्ट के रूप में चलाएँ:
```bash
npm install -D @blackwell-systems/vitest-mcp-assert
```
किसी डायरेक्टरी में सभी YAML फ़ाइलें स्वतः खोजें:
```ts
// mcp.test.ts
import { describeMcpSuite } from '@blackwell-systems/vitest-mcp-assert'
describeMcpSuite('mcp server', 'evals/')
```
या व्यक्तिगत assertions चलाएँ:
```ts
import { test } from 'vitest'
import { runMcpAssert } from '@blackwell-systems/vitest-mcp-assert'
test('echo tool', () => runMcpAssert('evals/echo.yaml'))
```
वही YAML फ़ाइलें Vitest, pytest और CLI में काम करती हैं। सभी विकल्पों के लिए `vitest-plugin/README.md` देखें।
## दस्तावेज़ीकरण
पूरा दस्तावेज़ीकरण [blackwell-systems.github.io/mcp-assert](https://blackwell-systems.github.io/mcp-assert) पर उपलब्ध है:
- [Getting Started](https://blackwell-systems.github.io/mcp-assert/getting-started/): इंस्टॉल, scaffold, पहला रन
- [Writing Assertions](https://blackwell-systems.github.io/mcp-assert/writing-assertions/): YAML प्रारूप, सभी 18 assertion प्रकार + 4 trajectory प्रकार, 8 block प्रकार, 6 टेस्ट फ़्रेमवर्क प्लगइन (pytest, Vitest, Jest, Bun, PHPUnit, Go test), setup चरण, capture, fixtures
- [CLI Reference](https://blackwell-systems.github.io/mcp-assert/cli/): फ़्लैग और उदाहरणों के साथ पूरा कमांड संदर्भ
- [Examples](https://blackwell-systems.github.io/mcp-assert/examples/): 8 भाषाओं में 65 उदाहरण सूट (606 assertions)
- [CI Integration](https://blackwell-systems.github.io/mcp-assert/ci-integration/): GitHub Action, JUnit XML, रिग्रेशन डिटेक्शन
- [Badge](https://blackwell-systems.github.io/mcp-assert/badge/): अपने सर्वर README में "Works with mcp-assert" बैज जोड़ें
- [Architecture](https://blackwell-systems.github.io/mcp-assert/architecture/): आंतरिक संरचना और डिज़ाइन निर्णय
- [Roadmap](https://blackwell-systems.github.io/mcp-assert/roadmap/): क्या शिप हो चुका है और आगे क्या है
- [Scorecard](https://blackwell-systems.github.io/mcp-assert/scorecard/): 13 सर्वरों में 32 bug पाए गए, 9 fix PR सबमिट किए गए, 58 सर्वर स्कैन किए गए