# 5 मिनट में JSON-RPC 2.0 — MCP और Agent-to-Agent Protocols

Source: https://www.geekswithgeeks.com/hi/mcp-a2a/m-jsonrpc

> वे तीन संदेश-रूप पढ़ें जिन पर MCP बना है।

## Requests, responses और notifications

MCP संदेश **JSON-RPC 2.0** हैं। **Request** में `jsonrpc: "2.0"`, `method`, वैकल्पिक `params` और `id` होता है, और वह उसी `id` वाला **response** अपेक्षित करता है जिसमें `result` या `error` (संख्यात्मक `code` और `message` सहित) हो। **Notification** में method होता है पर **id नहीं** और उत्तर नहीं मिलता। मानक error codes में **-32700** (parse error), **-32600** (invalid request), **-32601** (method not found), **-32602** (invalid params) और **-32603** (internal error) हैं। संदेश सादे JSON होने से MCP को सामान्य औज़ारों से log, replay और परखना आसान है।

## नीचे JSON-RPC

MCP JSON-RPC संदेश, capability handshake और तीन server primitives है।

![पाँच हिस्से: messages, handshake, tools, resources, prompts।](assets/figures/mcp-a2a/section-2-map.svg) — चित्र 2.1 — Messages, handshake, tools, resources और prompts।

## छोटा JSON-RPC dispatcher, चलाकर

मैंने यह सादे Python 3 (सिर्फ़ standard library) से चलाया। Function वैध call पर result, notification (id नहीं, उत्तर नहीं) पर `None`, और अज्ञात method (-32601), ग़लत params (-32602) व parse न होने वाले पाठ (-32700) के लिए मानक error ऑब्जेक्ट लौटाता है।

```python
import json

def handle(raw, methods):
    """A tiny JSON-RPC 2.0 dispatcher showing request, notification and error shapes."""
    try:
        msg = json.loads(raw)
    except json.JSONDecodeError:
        return {"jsonrpc": "2.0", "id": None, "error": {"code": -32700, "message": "Parse error"}}
    if "id" not in msg:                                   # notification: do the work, send no reply
        methods.get(msg["method"], lambda p: None)(msg.get("params"))
        return None
    if msg["method"] not in methods:
        return {"jsonrpc": "2.0", "id": msg["id"], "error": {"code": -32601, "message": "Method not found"}}
    try:
        return {"jsonrpc": "2.0", "id": msg["id"], "result": methods[msg["method"]](msg.get("params"))}
    except (KeyError, TypeError):
        return {"jsonrpc": "2.0", "id": msg["id"], "error": {"code": -32602, "message": "Invalid params"}}

methods = {"add": lambda p: p["a"] + p["b"], "ping": lambda p: {}}
for raw in ('{"jsonrpc":"2.0","id":1,"method":"add","params":{"a":2,"b":3}}',
            '{"jsonrpc":"2.0","method":"ping"}',
            '{"jsonrpc":"2.0","id":2,"method":"mul","params":{}}',
            '{"jsonrpc":"2.0","id":3,"method":"add","params":{"a":2}}',
            '{not json'):
    print(handle(raw, methods))

```

Output:

```
{'jsonrpc': '2.0', 'id': 1, 'result': 5}
None
{'jsonrpc': '2.0', 'id': 2, 'error': {'code': -32601, 'message': 'Method not found'}}
{'jsonrpc': '2.0', 'id': 3, 'error': {'code': -32602, 'message': 'Invalid params'}}
{'jsonrpc': '2.0', 'id': None, 'error': {'code': -32700, 'message': 'Parse error'}}
```

**Quiz:** JSON-RPC संदेश को notification क्या बनाता है?

- [ ] उसमें result field होता है
- [x] उसमें id नहीं होता और उत्तर अपेक्षित नहीं
- [ ] वह XML उपयोग करता है
- [ ] उसमें error code -32601 है

*Answer:* उसमें id नहीं होता और उत्तर अपेक्षित नहीं. सिर्फ़ requests में id होता है जिसे response दोहराता है।
