{"$schema":"https://wellknown.network/schemas/agent-record-v1.json","schemaVersion":"1","id":"ag_98cjvse8k8uk","handle":"otomata-mcp","url":"https://wellknown.network/agents/otomata-mcp","links":{"self":"https://wellknown.network/agents/otomata-mcp/record.json","html":"https://wellknown.network/agents/otomata-mcp","markdown":"https://wellknown.network/agents/otomata-mcp/record.md","api":"https://wellknown.network/api/v1/agents/otomata-mcp","status":"https://wellknown.network/api/v1/agents/otomata-mcp/status","claim":"https://wellknown.network/agents/otomata-mcp/claim","claimApi":"https://wellknown.network/api/v1/claims","claimDescriptor":"https://wellknown.network/agents/otomata-mcp/claim.json","badge":"https://wellknown.network/agents/otomata-mcp/badge.svg","openapi":"https://wellknown.network/openapi.json"},"ard":{"identifier":"urn:air::server:otomata-mcp","type":"application/mcp-server-card+json"},"kind":"mcp_server","declared":{"name":"otomata-mcp","summary":"Socle commun des serveurs MCP Otomata : doctrines en base servies en tools, runs start/stop, RBAC scopé, logging. Tout-en-tools, scope injecté (intra-entreprise ; le × Z reste à l'orchestrateur).","description":"# otomata-mcp\n\nSocle commun des serveurs MCP Otomata (Python / FastMCP). **Tout-en-tools** (pas de\nresource ni de prompt → tout accès est loggé), **scopé par entreprise**.\n\nLe socle modélise l'**intra-entreprise** (1 org = X groupes, Y users). Le **multi-entreprise\n(× Z)** — résolution de l'org courante, `platform_admin`, marketplace de doctrines — reste dans\nl'**orchestrateur** (oto / madeleine), qui injecte un **scope** (`tenant_id`) à chaque appel. Le\nsocle ne requête jamais sans scope → pas de fuite cross-org.\n\n## Modules\n\n```\notomata_mcp/\n  scope.py        # Scope + ScopeResolver (ConstantScope = Z1, CallableScope = ZN)\n  identity.py     # current_identity() via resolver injecté (JWT en prod)\n  content/        # instructions en base, servies EN TOOLS (readme_agent / list_instructions / get_instruction / set_instruction)\n                  #   model · store (Protocol + InMemory) · validate (zéro nom) · schema (DDL) · tools\n  run/            # start/stop : pile de runs en session state, corrélée run_id\n  rbac/           # org_admin → group_admin → member, scopé (gate des tools)\n  logging.py      # middleware run-aware (réutilise le schéma otomata-calllog + run_id)\n  bootstrap.py    # build_server(...) compose tout\n```\n\n## Ce que le consommateur fournit (injecté)\n\n- un **`ContentStore`** (OGIC : PostgREST/Supabase ; oto/madeleine : asyncpg) — `SCHEMA_SQL` fourni ;\n- un **`RoleStore`** (rôles scopés) ;\n- un **`ScopeResolver`** (`ConstantScope(\"ogic\")` en Z=1, `CallableScope(current_org)` en Z=N) ;\n- un **sink de logs** (table `tool_calls`, cf. `otomata-calllog`) ;\n- l'**auth** (verifier JWT du provider) — le socle lit l'identité via un resolver injecté.\n\n## Exemple\n\n```python\nfrom otomata_mcp import build_server, InMemoryContentStore, InMemoryRoleStore, ConstantScope\nmcp = build_server(\"mon-mcp\", content_store=..., role_store=..., scope_resolver=ConstantScope(\"acme\"),\n                   sink=my_sink, blocklist=[\"NomInterdit\"])\n```\n\n`example_demo.py` montre tout (do…","publisher":null,"homepage":"https://github.com/otomata-tech/otomata-mcp","repository":"https://github.com/otomata-tech/otomata-mcp","version":"0.3.0","license":"Proprietary","protocols":["mcp"],"tags":["mcp","fastmcp","doctrine","rbac","multi-tenant"],"pricing":null,"endpoints":[{"url":"pypi:otomata-mcp","type":"package_pypi","auth":null,"probeable":false}],"skills":null,"tools":null,"extra":null,"attribution":{"kind":"pypi","name":"pypi","license":"pypi","repoUrl":"pypi","summary":"pypi","version":"pypi","description":"pypi","homepageUrl":"pypi"}},"derived":{"capabilities":[{"slug":"security.identity","name":"Identity & Access","confidence":0.779,"provenance":"derived"},{"slug":"data.database","name":"Databases","confidence":0.768,"provenance":"derived"}],"categories":["data","security"],"language":"fr"},"observed":{"status":"unknown","statusReason":"Distributed as a package to run locally; no network endpoint to check.","lastOkAt":null,"lastProbedAt":null,"statusComputedAt":null,"reliability30d":null,"latestObservations":[],"tools":null,"package":{"name":"otomata-mcp","registry":"pypi","observedAt":"2026-09-10T09:26:45.095Z","publishedAt":"2026-06-24T23:23:39.798647Z","latestVersion":"0.3.0"}},"verification":{"claimed":false,"claimedAt":null,"proofs":[]},"provenance":{"sources":[{"source":"pypi","key":"otomata-mcp","url":"https://pypi.org/project/otomata-mcp/","firstSeenAt":"2026-09-10T09:25:06.363Z","fetchedAt":"2026-09-10T09:25:06.363Z","normalizedAt":"2026-09-10T09:25:06.363Z"}]},"firstSeenAt":"2026-09-10T09:25:06.363Z","updatedAt":"2026-09-10T09:26:45.095Z"}