mrpd 0.1.0__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (51) hide show
  1. mrpd/__init__.py +1 -0
  2. mrpd/adapters/__init__.py +1 -0
  3. mrpd/api/app.py +8 -0
  4. mrpd/api/routes.py +200 -0
  5. mrpd/cli.py +182 -0
  6. mrpd/commands/__init__.py +1 -0
  7. mrpd/commands/bridge_mcp.py +189 -0
  8. mrpd/commands/bridge_openapi.py +279 -0
  9. mrpd/commands/init_provider.py +176 -0
  10. mrpd/commands/mrpify_mcp.py +80 -0
  11. mrpd/commands/mrpify_openapi.py +80 -0
  12. mrpd/commands/publish.py +102 -0
  13. mrpd/commands/route.py +126 -0
  14. mrpd/commands/run.py +169 -0
  15. mrpd/commands/serve.py +13 -0
  16. mrpd/commands/validate.py +71 -0
  17. mrpd/core/__init__.py +1 -0
  18. mrpd/core/artifacts.py +39 -0
  19. mrpd/core/config.py +26 -0
  20. mrpd/core/defaults.py +7 -0
  21. mrpd/core/envelopes.py +29 -0
  22. mrpd/core/errors.py +37 -0
  23. mrpd/core/evidence.py +17 -0
  24. mrpd/core/models.py +37 -0
  25. mrpd/core/provider.py +100 -0
  26. mrpd/core/registry.py +115 -0
  27. mrpd/core/schema.py +64 -0
  28. mrpd/core/scoring.py +92 -0
  29. mrpd/core/util.py +27 -0
  30. mrpd/spec/__init__.py +1 -0
  31. mrpd/spec/fixtures/README.md +8 -0
  32. mrpd/spec/fixtures/invalid/bad_msg_type.json +8 -0
  33. mrpd/spec/fixtures/invalid/missing_required_fields.json +7 -0
  34. mrpd/spec/fixtures/valid/discover.json +13 -0
  35. mrpd/spec/fixtures/valid/error.json +13 -0
  36. mrpd/spec/fixtures/valid/offer.json +20 -0
  37. mrpd/spec/schemas/envelope.schema.json +102 -0
  38. mrpd/spec/schemas/manifest.schema.json +52 -0
  39. mrpd/spec/schemas/payloads/discover.schema.json +23 -0
  40. mrpd/spec/schemas/payloads/error.schema.json +15 -0
  41. mrpd/spec/schemas/payloads/evidence.schema.json +17 -0
  42. mrpd/spec/schemas/payloads/execute.schema.json +14 -0
  43. mrpd/spec/schemas/payloads/negotiate.schema.json +15 -0
  44. mrpd/spec/schemas/payloads/offer.schema.json +30 -0
  45. mrpd/spec/schemas/types/artifact.schema.json +15 -0
  46. mrpd/spec/schemas/types/input.schema.json +20 -0
  47. mrpd-0.1.0.dist-info/METADATA +104 -0
  48. mrpd-0.1.0.dist-info/RECORD +51 -0
  49. mrpd-0.1.0.dist-info/WHEEL +5 -0
  50. mrpd-0.1.0.dist-info/entry_points.txt +2 -0
  51. mrpd-0.1.0.dist-info/top_level.txt +1 -0
@@ -0,0 +1,15 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "$id": "https://www.moltrouter.dev/schemas/mrp/0.1/payloads/error.schema.json",
4
+ "title": "MRP ERROR Payload",
5
+ "type": "object",
6
+ "additionalProperties": false,
7
+ "required": ["code", "message", "retryable"],
8
+ "properties": {
9
+ "code": {"type": "string", "pattern": "^MRP_[A-Z0-9_]+$"},
10
+ "message": {"type": "string"},
11
+ "retryable": {"type": "boolean"},
12
+ "retry_after_ms": {"type": "integer", "minimum": 0},
13
+ "details": {"type": "object"}
14
+ }
15
+ }
@@ -0,0 +1,17 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "$id": "https://www.moltrouter.dev/schemas/mrp/0.1/payloads/evidence.schema.json",
4
+ "title": "MRP EVIDENCE Payload",
5
+ "type": "object",
6
+ "additionalProperties": false,
7
+ "required": ["route_id"],
8
+ "properties": {
9
+ "route_id": {"type": "string"},
10
+ "job_id": {"type": "string"},
11
+ "outputs": {"type": "array", "items": {"$ref": "../types/input.schema.json"}},
12
+ "provenance": {"type": "object"},
13
+ "attestations": {"type": "array", "items": {"type": "string"}},
14
+ "usage": {"type": "object"},
15
+ "settlement": {"type": "object"}
16
+ }
17
+ }
@@ -0,0 +1,14 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "$id": "https://www.moltrouter.dev/schemas/mrp/0.1/payloads/execute.schema.json",
4
+ "title": "MRP EXECUTE Payload",
5
+ "type": "object",
6
+ "additionalProperties": false,
7
+ "required": ["route_id"],
8
+ "properties": {
9
+ "route_id": {"type": "string"},
10
+ "inputs": {"type": "array", "items": {"$ref": "../types/input.schema.json"}},
11
+ "output_format": {"type": "string"},
12
+ "job": {"type": "object"}
13
+ }
14
+ }
@@ -0,0 +1,15 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "$id": "https://www.moltrouter.dev/schemas/mrp/0.1/payloads/negotiate.schema.json",
4
+ "title": "MRP NEGOTIATE Payload",
5
+ "type": "object",
6
+ "additionalProperties": false,
7
+ "required": ["route_id"],
8
+ "properties": {
9
+ "route_id": {"type": "string"},
10
+ "constraints": {"type": "object", "additionalProperties": true},
11
+ "proofs": {"type": "array", "items": {"type": "string"}},
12
+ "inputs": {"type": "array", "items": {"$ref": "../types/input.schema.json"}},
13
+ "payment_intent": {"type": "object"}
14
+ }
15
+ }
@@ -0,0 +1,30 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "$id": "https://www.moltrouter.dev/schemas/mrp/0.1/payloads/offer.schema.json",
4
+ "title": "MRP OFFER Payload",
5
+ "type": "object",
6
+ "additionalProperties": false,
7
+ "required": ["offers"],
8
+ "properties": {
9
+ "offers": {
10
+ "type": "array",
11
+ "items": {
12
+ "type": "object",
13
+ "additionalProperties": true,
14
+ "required": ["route_id", "capability"],
15
+ "properties": {
16
+ "route_id": {"type": "string"},
17
+ "capability": {"type": "string"},
18
+ "confidence": {"type": "number", "minimum": 0, "maximum": 1},
19
+ "cost": {"type": "object"},
20
+ "latency": {"type": "object"},
21
+ "proofs": {"type": "array", "items": {"type": "string"}},
22
+ "policy": {"type": "array", "items": {"type": "string"}},
23
+ "risk": {"type": "object"},
24
+ "endpoint": {"type": "string"}
25
+ }
26
+ }
27
+ },
28
+ "page": {"type": "object"}
29
+ }
30
+ }
@@ -0,0 +1,15 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "$id": "https://www.moltrouter.dev/schemas/mrp/0.1/types/artifact.schema.json",
4
+ "title": "MRP Artifact Reference",
5
+ "type": "object",
6
+ "additionalProperties": false,
7
+ "required": ["type", "uri", "hash"],
8
+ "properties": {
9
+ "type": {"const": "artifact"},
10
+ "uri": {"type": "string", "minLength": 1},
11
+ "hash": {"type": "string", "pattern": "^(sha256|sha512):"},
12
+ "size": {"type": "integer", "minimum": 0},
13
+ "mime": {"type": "string"}
14
+ }
15
+ }
@@ -0,0 +1,20 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "$id": "https://www.moltrouter.dev/schemas/mrp/0.1/types/input.schema.json",
4
+ "title": "MRP Input Item",
5
+ "type": "object",
6
+ "additionalProperties": false,
7
+ "required": ["type"],
8
+ "properties": {
9
+ "type": {"type": "string"},
10
+ "value": {},
11
+ "uri": {"type": "string"},
12
+ "hash": {"type": "string"},
13
+ "size": {"type": "integer"},
14
+ "mime": {"type": "string"}
15
+ },
16
+ "oneOf": [
17
+ {"required": ["type", "value"], "properties": {"type": {"enum": ["text", "url", "json", "markdown"]}}},
18
+ {"$ref": "./artifact.schema.json"}
19
+ ]
20
+ }
@@ -0,0 +1,104 @@
1
+ Metadata-Version: 2.4
2
+ Name: mrpd
3
+ Version: 0.1.0
4
+ Summary: Moltrouter Protocol Daemon: serve, route, bridge, validate
5
+ Author: Thor
6
+ License: MIT
7
+ Requires-Python: >=3.10
8
+ Description-Content-Type: text/markdown
9
+ Requires-Dist: fastapi>=0.110
10
+ Requires-Dist: uvicorn[standard]>=0.27
11
+ Requires-Dist: pydantic>=2.6
12
+ Requires-Dist: httpx>=0.27
13
+ Requires-Dist: typer>=0.12
14
+ Requires-Dist: pyyaml>=6.0
15
+ Requires-Dist: jsonschema>=4.21
16
+
17
+ # mrpd — Moltrouter Protocol Daemon
18
+
19
+ One installable package that can:
20
+ - **serve** MRP endpoints for local tools (`mrpd serve`)
21
+ - **route** intents as a client (`mrpd route ...`) (v0: registry query + ranking)
22
+ - **bridge** other tool ecosystems (OpenAPI/MCP) into MRP (`mrpd bridge ...`)
23
+ - **mrpify** existing systems with a guided flow (`mrpd mrpify ...`)
24
+ - **validate** MRP envelopes against schemas/fixtures (`mrpd validate`) (working)
25
+
26
+ ## Status
27
+ Minimal server + validation are working.
28
+
29
+ Implemented:
30
+ - Bundled canonical JSON Schemas + fixtures
31
+ - `mrpd validate` (including `--fixtures`)
32
+ - `mrpd route` (v0: query + rank + fetch manifests)
33
+ - `mrpd bridge openapi` + `mrpd mrpify openapi`
34
+ - `mrpd bridge mcp` (scaffold) + `mrpd mrpify mcp`
35
+
36
+ Planned next:
37
+ - negotiate/execute
38
+ - MCP bridge execute (stdio)
39
+
40
+ ## Dev
41
+ ```bash
42
+ python -m venv .venv
43
+ . .venv/bin/activate # (Windows PowerShell: .\.venv\Scripts\Activate.ps1)
44
+ pip install -e .
45
+
46
+ mrpd serve --reload
47
+ ```
48
+
49
+ ## Bridge / Mrpify (v0)
50
+ OpenAPI:
51
+ ```bash
52
+ mrpd bridge openapi --spec openapi.yaml --out-dir ./mrp-openapi-bridge
53
+ mrpd mrpify openapi --spec openapi.yaml --out-dir ./mrp-openapi-bridge \
54
+ --provider-id service:openapi/bridge --public-base-url https://YOUR_DOMAIN
55
+ ```
56
+
57
+ MCP (stdio scaffold):
58
+ ```bash
59
+ mrpd bridge mcp --tools-json tools.json --mcp-command node --mcp-arg server.js
60
+ mrpd mrpify mcp --tools-json tools.json --mcp-command node --mcp-arg server.js \
61
+ --provider-id service:mcp/bridge --public-base-url https://YOUR_DOMAIN
62
+ ```
63
+
64
+ ## Validate
65
+ Run the bundled conformance fixtures:
66
+ ```bash
67
+ mrpd validate --fixtures
68
+ ```
69
+
70
+ Validate a single envelope JSON file:
71
+ ```bash
72
+ mrpd validate --path path/to/envelope.json
73
+ ```
74
+
75
+ ## Route (v0)
76
+ `mrpd route` queries a registry and prints ranked candidates. **Registry entries must include `manifest_url`.**
77
+
78
+ Defaults:
79
+ - Registry base URL: `https://www.moltrouter.dev`
80
+ - No raw bootstrap fallback is used unless explicitly configured (see below).
81
+
82
+ Examples:
83
+ ```bash
84
+ mrpd route "inspect router capability" --capability router --policy no_pii --limit 5
85
+ ```
86
+
87
+ Optional bootstrap (mostly for offline/dev):
88
+
89
+ - Env var: `MRP_BOOTSTRAP_REGISTRY_RAW` (supports `file://...`)
90
+ - Or CLI: `mrpd route ... --bootstrap-raw file:///C:/path/to/registry.json`
91
+
92
+ Example:
93
+ ```bash
94
+ mrpd route "inspect router capability" --capability router --policy no_pii \
95
+ --bootstrap-raw "file:///C:/path/to/registry.json"
96
+ ```
97
+
98
+ ## Endpoints (initial)
99
+ - `GET /.well-known/mrp.json`
100
+ - `GET /mrp/manifest`
101
+ - `POST /mrp/hello`
102
+ - `POST /mrp/discover`
103
+ - `POST /mrp/negotiate`
104
+ - `POST /mrp/execute`
@@ -0,0 +1,51 @@
1
+ mrpd/__init__.py,sha256=da1PTClDMl-IBkrSvq6JC1lnS-K_BASzCvxVhNxN5Ls,13
2
+ mrpd/cli.py,sha256=1UPLySRlN0fC_aWNJlVvndqZ_RpiyS8nR0ExUeCRY8Y,9463
3
+ mrpd/adapters/__init__.py,sha256=da1PTClDMl-IBkrSvq6JC1lnS-K_BASzCvxVhNxN5Ls,13
4
+ mrpd/api/app.py,sha256=v1MV-DAAqXGyMESOxeOj4EokiVlRJA9nENqMZgOwZ40,185
5
+ mrpd/api/routes.py,sha256=fmDIpU6QRq0pW9tPYp3iEh6PGBMcLtwaMe9EWeE_k_s,6016
6
+ mrpd/commands/__init__.py,sha256=da1PTClDMl-IBkrSvq6JC1lnS-K_BASzCvxVhNxN5Ls,13
7
+ mrpd/commands/bridge_mcp.py,sha256=krG_CV712Sy4Rk5mkZPExX8gymVbGvgfdywwRc-SkKY,5956
8
+ mrpd/commands/bridge_openapi.py,sha256=e8qj1AupaNHkbYWmZbdwumzwjzv0m4GSEvaXvtvZy0c,9268
9
+ mrpd/commands/init_provider.py,sha256=pCu5deuphCvjQVhjH5rpYP3Z39zLlCz95zSvGfQsRnY,5450
10
+ mrpd/commands/mrpify_mcp.py,sha256=2nhi4duxw31uciHC4k_1KyAnH8Ydbs1lZmEgov4RXTg,2357
11
+ mrpd/commands/mrpify_openapi.py,sha256=QfUs-vHeQ7Na5eSwMNUkdmsYtF-380DSGeVRixWV4DE,2435
12
+ mrpd/commands/publish.py,sha256=bZIkNjZJVb-hQbJodIHOlJ9QM6rKGtgBPI77xQALMko,3594
13
+ mrpd/commands/route.py,sha256=F9F_mZIdJ8qiZkYP3trbmpibfeJIWel7D4GCcPsG4Cs,5091
14
+ mrpd/commands/run.py,sha256=_0RTEEXWwRyK0fpxkdQXXnknAMTigdMTxkDs5lwRW2c,6593
15
+ mrpd/commands/serve.py,sha256=WdT6NLpTZnxoBCw9em4Q23cFm5jSk3WSxt5no28CMBc,246
16
+ mrpd/commands/validate.py,sha256=rl8L1seM8rySlsHB4Dd2fWUznha7xgjB0U_ascmTOQ0,1880
17
+ mrpd/core/__init__.py,sha256=da1PTClDMl-IBkrSvq6JC1lnS-K_BASzCvxVhNxN5Ls,13
18
+ mrpd/core/artifacts.py,sha256=nymfm_6QtZct60hSPhPSevZZwxOojKTYw_fj_I-xPpk,996
19
+ mrpd/core/config.py,sha256=c4QiE9qlAgeJJ3ENDiACGleu1zS6Y8IL3Lt7BLlQFhk,584
20
+ mrpd/core/defaults.py,sha256=yref7u1jxm3TppTyw92VYOEFTCIyXGUec5GMEpMNUMQ,370
21
+ mrpd/core/envelopes.py,sha256=18ubyr5kzsTqEuoMJshm3H2Nqip6By1NXesJjThaV0Q,686
22
+ mrpd/core/errors.py,sha256=ICyipFWCu-1LScUm91jRucWTlfq2Jhbt3GlDFbk09fM,1064
23
+ mrpd/core/evidence.py,sha256=xQKZ1C_MK8MHzQmUfvL0UEEAAHZfcatzCvWd6O6I8HY,450
24
+ mrpd/core/models.py,sha256=pXIIfDuMWU4uiUZXi_Mchs8ktwr0h-vxqLhaW_TRjRo,993
25
+ mrpd/core/provider.py,sha256=fzwE9gk8wMSk6zHcMmMAFRPrN4S5KpVOe6rRTkh5iQk,3082
26
+ mrpd/core/registry.py,sha256=6zBY6c9OOEcHEtL4eQSPynS3H5COzd8iaGw9Je3OjHQ,4351
27
+ mrpd/core/schema.py,sha256=H_dkN9_pABIyoIC9Ar6ZDhWqMPf_5KnhsepkpabWUHg,2183
28
+ mrpd/core/scoring.py,sha256=vvbWIxDH_PuCQ5a3TkR1XhZLMKKahep5VaiyhbQUXak,2688
29
+ mrpd/core/util.py,sha256=RfM73KaIa-N47a9lc0PcPZwssbAAT_Ekp432VYGFPsw,780
30
+ mrpd/spec/__init__.py,sha256=da1PTClDMl-IBkrSvq6JC1lnS-K_BASzCvxVhNxN5Ls,13
31
+ mrpd/spec/fixtures/README.md,sha256=HTwyw8k_ao8haZsNbDzrc3d8zdP3fV3JCN-otvrhcmM,238
32
+ mrpd/spec/fixtures/invalid/bad_msg_type.json,sha256=lfXYFfT8axJBb5EJqZSQGqdpa3Y-iGn6Fpn1F6Pj2dE,212
33
+ mrpd/spec/fixtures/invalid/missing_required_fields.json,sha256=kRONkhUR3JTBWlJk7y5MQa9AJiuf5Q5babvxkQNmMFE,166
34
+ mrpd/spec/fixtures/valid/discover.json,sha256=DgPagU15wI-qlHupkhRX-QNL-r1XzB9ptqNVdd_4bv0,431
35
+ mrpd/spec/fixtures/valid/error.json,sha256=HoANfOpCD94rOnVRuUOSXm7OJJVnjZPzcDbfMDwrWRk,332
36
+ mrpd/spec/fixtures/valid/offer.json,sha256=ba4ppvAmg2zYk8KhPy_YZxcXoX0X3Q-ub3FFCwm-_sE,547
37
+ mrpd/spec/schemas/envelope.schema.json,sha256=OEViiNcDoTgrxNkWHLaXEVlvEo5r9r6-2Mw2B6ZIBbE,3354
38
+ mrpd/spec/schemas/manifest.schema.json,sha256=GbsxF1CsuGXoXU7sTw6cDjiZJ5TnhhCWQ_-oFHuQ6pg,1639
39
+ mrpd/spec/schemas/payloads/discover.schema.json,sha256=J_1baDucksJOEhStkGlZxPZuebf9OjHFERi3oHp6rkg,855
40
+ mrpd/spec/schemas/payloads/error.schema.json,sha256=KBaf6g9JFzo7v3Mvg-IKnybK9ePtAQUBLnmTFkJog54,544
41
+ mrpd/spec/schemas/payloads/evidence.schema.json,sha256=kNBO6UyCpEEddQ49Ly5VY9d_AzG2Wrw5z81CaAL9P0o,634
42
+ mrpd/spec/schemas/payloads/execute.schema.json,sha256=ddqVUrCAhasc58moBmFNZlfIjr_l0BkMGViicyLwxzQ,489
43
+ mrpd/spec/schemas/payloads/negotiate.schema.json,sha256=YdP-HFuVOZgsR7Vq6noqxDfQFKTwWSWgrZA4n_GbkuE,595
44
+ mrpd/spec/schemas/payloads/offer.schema.json,sha256=jt_KVkJSFoAx8lChHD30MdUFj62Ijx1KO2iVxwjnuss,1010
45
+ mrpd/spec/schemas/types/artifact.schema.json,sha256=stvc0gv6KikylizFysVAVYBc5bCBu8qtPMgQcIetJAQ,537
46
+ mrpd/spec/schemas/types/input.schema.json,sha256=aib8ADqlKV36vczRz-Mua1pwqSMmqJ3aJEHoP8TuDU4,633
47
+ mrpd-0.1.0.dist-info/METADATA,sha256=xSN_g73uh5Avvrst0HYS3VVTuFmlzMmSNf2YobLHs9s,3080
48
+ mrpd-0.1.0.dist-info/WHEEL,sha256=wUyA8OaulRlbfwMtmQsvNngGrxQHAvkKcvRmdizlJi0,92
49
+ mrpd-0.1.0.dist-info/entry_points.txt,sha256=ave-G9XLvLfpnozKLy9daIIj37YqeIpinCwXQVn67Fw,38
50
+ mrpd-0.1.0.dist-info/top_level.txt,sha256=hnJRv3WaBi18Z1rIHwU0wiT4jScXWqiRJMX31TVr8dM,5
51
+ mrpd-0.1.0.dist-info/RECORD,,
@@ -0,0 +1,5 @@
1
+ Wheel-Version: 1.0
2
+ Generator: setuptools (80.10.2)
3
+ Root-Is-Purelib: true
4
+ Tag: py3-none-any
5
+
@@ -0,0 +1,2 @@
1
+ [console_scripts]
2
+ mrpd = mrpd.cli:app
@@ -0,0 +1 @@
1
+ mrpd