{"$schema":"https://wellknown.network/schemas/agent-record-v1.json","schemaVersion":"1","id":"ag_gudvvetzbreg","handle":"odile-gate","url":"https://wellknown.network/agents/odile-gate","links":{"self":"https://wellknown.network/agents/odile-gate/record.json","html":"https://wellknown.network/agents/odile-gate","markdown":"https://wellknown.network/agents/odile-gate/record.md","api":"https://wellknown.network/api/v1/agents/odile-gate","status":"https://wellknown.network/api/v1/agents/odile-gate/status","claim":"https://wellknown.network/agents/odile-gate/claim","claimApi":"https://wellknown.network/api/v1/claims","claimDescriptor":"https://wellknown.network/agents/odile-gate/claim.json","badge":"https://wellknown.network/agents/odile-gate/badge.svg","openapi":"https://wellknown.network/openapi.json","history":"https://wellknown.network/api/v1/agents/odile-gate/history","tools":"https://wellknown.network/api/v1/agents/odile-gate/tools"},"ard":{"identifier":"urn:air:gate.odilelabs.com:server:odile-gate","type":"application/mcp-server-card+json"},"kind":"mcp_server","declared":{"name":"Odile Gate","summary":"Enforce AI agent API permissions, approvals and safe retries. Check the setup and audit every call.","description":"Enforce AI agent API permissions, approvals and safe retries. Check the setup and audit every call.","publisher":{"name":"com.odilelabs","url":null},"homepage":"https://gate.odilelabs.com/","repository":null,"version":"1.6.0","license":null,"protocols":["mcp"],"tags":[],"pricing":null,"endpoints":[{"url":"https://gate.odilelabs.com/mcp","type":"mcp_streamable_http","auth":null,"probeable":true}],"skills":null,"tools":null,"extra":{"updatedAt":"2026-10-24T14:27:16.268294Z","publishedAt":"2026-10-24T14:27:16.268294Z","registryName":"com.odilelabs/gate"},"attribution":{"kind":"mcp_registry","name":"mcp_registry","summary":"mcp_registry","version":"mcp_registry","description":"mcp_registry","homepageUrl":"mcp_registry","publisherName":"mcp_registry"}},"derived":{"capabilities":[{"slug":"security.identity","name":"Identity & Access","confidence":1,"provenance":"derived"},{"slug":"ai.prompting","name":"Prompt Management","confidence":0.525,"provenance":"derived"},{"slug":"code.execution","name":"Code Execution","confidence":0.51,"provenance":"derived"},{"slug":"commerce.payments","name":"Payments","confidence":0.51,"provenance":"derived"}],"categories":["ai","code","commerce","security"],"language":"en"},"observed":{"status":"live","statusReason":"Responded 21m ago.","lastOkAt":"2026-10-25T15:27:31.118Z","lastProbedAt":"2026-10-25T15:27:31.118Z","statusComputedAt":"2026-10-25T15:30:30.866Z","reliability30d":{"probes":14,"successRate":1,"p50Ms":44,"basis":"service","measures":{"availability":"availability","latency":"response time","tools":"tool surface observed","summary":"Checks reached the service itself."},"checks":{"total":14,"ok":14,"authBoundaryOk":0,"serviceOk":14,"note":"Counted from the observation rows for the window, checks of the server only (HTTP, A2A card, MCP initialize). ok = authBoundaryOk + serviceOk. `probes` is the sum of daily rollups and includes registry checks, so it can differ from `total`."}},"latestObservations":[{"at":"2026-10-25T15:27:31.118Z","kind":"mcp_initialize","ok":true,"httpStatus":200,"latencyMs":66,"error":null,"detail":{"tools":[{"name":"gate_openshell_setup","description":"Read-only local setup plan for native OpenShell + Gate: one command, exact installer hash, recipe schema, prerequisites, authority boundaries and cleanup. Defau"},{"name":"gate_create_project","description":"Create a Free project in front of an existing HTTPS API. No signup or payment required. For a credential-free demo use https://sandbox.gate.odilelabs.com with G"},{"name":"gate_add_app","description":"Give one app its own key and the calls it may make. Routes are rules like \"GET /orders/:id\", \"POST /orders\", \"GET /users/{user}/orders\" (per-user), or example c"},{"name":"gate_list_apps","description":"The project's apps with their allowed calls, limits, state and anomaly-guard settings."},{"name":"gate_check_setup","description":"Read actual Gate protection settings before giving an integration production access. Reports observe-only mode, writes without mandatory runs, missing user-toke"},{"name":"gate_metrics","description":"Read last-24-hour stored call counts by HTTP status and reason, measured duration through response headers (including upstream wait), per-app anomaly scores and"},{"name":"gate_audit","description":"The most recent calls through the gateway (time, app, matched route, status, reason, duration), newest first, with totals by status and refusal reason. Gate nev"},{"name":"gate_create_run","description":"Gate Actions: give one agent session narrow, expiring permission. Actions are rules with {placeholders} bound by scope (e.g. \"PATCH /customers/{customer}/ticket"},{"name":"gate_set_app_runs","description":"Make an app need a run: \"writes\" (every write needs x-odile-run), \"all\" (every call), or \"off\"."},{"name":"gate_set_response","description":"Opt-in JSON response redaction: return only explicit JSON Pointer paths, e.g. /id and /items/*/name. * matches one segment; selecting a container allows its who"},{"name":"gate_add_approver","description":"Create an approver key for the person who approves held actions (shown once). Give it to that person, never to an agent: once a project has an approver, the adm"},{"name":"gate_list_actions","description":"Actions waiting for approval (or in another state), with the exact call. With an installed approval-risk model, pending actions sort by risk descending and incl"},{"name":"gate_explain_refusal","description":"What a Gate refusal means and how to fix it, from the x-gate-refused header value (e.g. route_not_allowed)."},{"name":"gate_delegate_run","description":"Hand a narrower run to another active app in the same project. Uses the parent app key and run token, never the admin key. Scope, expiry, approvals and ancestor"},{"name":"gate_learn_suggestions","description":"Read normalized routes and a suggested per-minute limit from an admin-enabled, time-boxed learning session. Records only method, normalized path templates and c"},{"name":"gate_audit_proof","description":"Read chained audit rows, decided-action feature snapshots and anchors with an HMAC-SHA256 signature. No sealed paths/bodies, notes, keys or IPs in the action la"},{"name":"gate_audit_verify","description":"Recompute a pasted export chain and project signature; returns intact or broken_at (one-based row position). Does not approve actions or change permissions."},{"name":"gate_run_tree","description":"Read a run and its delegated descendants without tokens."},{"name":"gate_run_timeline","description":"Read call metadata, approvals and approver names, recovery outcomes and delegated children; no bodies or query values."},{"name":"gate_validate_config","description":"Parse and check a declarative Gate config (apps, routes, rate limits, run mode, plugins including anomaly-guard, alerts, approvers) without changing anything. a"},{"name":"gate_sync_declarative","description":"Make a Gate project match an odile.yaml: creates the project (if no project_id) and missing apps and approvers, applies run mode, loop, learning and anomaly-gua"}],"toolCount":21,"toolsHash":"4c2f7bfe655a6c6ac8be2a0a78528214a5835aca15da14027530dfc4950f0a39","serverName":"com.odilelabs/gate","capabilities":["tools"],"serverVersion":"1.6.0","protocolVersion":"2025-06-18"}},{"at":"2026-10-25T08:26:16.253Z","kind":"mcp_initialize","ok":true,"httpStatus":200,"latencyMs":31,"error":null,"detail":{"tools":[{"name":"gate_openshell_setup","description":"Read-only local setup plan for native OpenShell + Gate: one command, exact installer hash, recipe schema, prerequisites, authority boundaries and cleanup. Defau"},{"name":"gate_create_project","description":"Create a Free project in front of an existing HTTPS API. No signup or payment required. For a credential-free demo use https://sandbox.gate.odilelabs.com with G"},{"name":"gate_add_app","description":"Give one app its own key and the calls it may make. Routes are rules like \"GET /orders/:id\", \"POST /orders\", \"GET /users/{user}/orders\" (per-user), or example c"},{"name":"gate_list_apps","description":"The project's apps with their allowed calls, limits, state and anomaly-guard settings."},{"name":"gate_check_setup","description":"Read actual Gate protection settings before giving an integration production access. Reports observe-only mode, writes without mandatory runs, missing user-toke"},{"name":"gate_metrics","description":"Read last-24-hour stored call counts by HTTP status and reason, measured duration through response headers (including upstream wait), per-app anomaly scores and"},{"name":"gate_audit","description":"The most recent calls through the gateway (time, app, matched route, status, reason, duration), newest first, with totals by status and refusal reason. Gate nev"},{"name":"gate_create_run","description":"Gate Actions: give one agent session narrow, expiring permission. Actions are rules with {placeholders} bound by scope (e.g. \"PATCH /customers/{customer}/ticket"},{"name":"gate_set_app_runs","description":"Make an app need a run: \"writes\" (every write needs x-odile-run), \"all\" (every call), or \"off\"."},{"name":"gate_set_response","description":"Opt-in JSON response redaction: return only explicit JSON Pointer paths, e.g. /id and /items/*/name. * matches one segment; selecting a container allows its who"},{"name":"gate_add_approver","description":"Create an approver key for the person who approves held actions (shown once). Give it to that person, never to an agent: once a project has an approver, the adm"},{"name":"gate_list_actions","description":"Actions waiting for approval (or in another state), with the exact call. With an installed approval-risk model, pending actions sort by risk descending and incl"},{"name":"gate_explain_refusal","description":"What a Gate refusal means and how to fix it, from the x-gate-refused header value (e.g. route_not_allowed)."},{"name":"gate_delegate_run","description":"Hand a narrower run to another active app in the same project. Uses the parent app key and run token, never the admin key. Scope, expiry, approvals and ancestor"},{"name":"gate_learn_suggestions","description":"Read normalized routes and a suggested per-minute limit from an admin-enabled, time-boxed learning session. Records only method, normalized path templates and c"},{"name":"gate_audit_proof","description":"Read chained audit rows, decided-action feature snapshots and anchors with an HMAC-SHA256 signature. No sealed paths/bodies, notes, keys or IPs in the action la"},{"name":"gate_audit_verify","description":"Recompute a pasted export chain and project signature; returns intact or broken_at (one-based row position). Does not approve actions or change permissions."},{"name":"gate_run_tree","description":"Read a run and its delegated descendants without tokens."},{"name":"gate_run_timeline","description":"Read call metadata, approvals and approver names, recovery outcomes and delegated children; no bodies or query values."},{"name":"gate_validate_config","description":"Parse and check a declarative Gate config (apps, routes, rate limits, run mode, plugins including anomaly-guard, alerts, approvers) without changing anything. a"},{"name":"gate_sync_declarative","description":"Make a Gate project match an odile.yaml: creates the project (if no project_id) and missing apps and approvers, applies run mode, loop, learning and anomaly-gua"}],"toolCount":21,"toolsHash":"4c2f7bfe655a6c6ac8be2a0a78528214a5835aca15da14027530dfc4950f0a39","serverName":"com.odilelabs/gate","capabilities":["tools"],"serverVersion":"1.6.0","protocolVersion":"2025-06-18"}},{"at":"2026-10-25T01:27:10.601Z","kind":"mcp_initialize","ok":true,"httpStatus":200,"latencyMs":47,"error":null,"detail":{"tools":[{"name":"gate_openshell_setup","description":"Read-only local setup plan for native OpenShell + Gate: one command, exact installer hash, recipe schema, prerequisites, authority boundaries and cleanup. Defau"},{"name":"gate_create_project","description":"Create a Free project in front of an existing HTTPS API. No signup or payment required. For a credential-free demo use https://sandbox.gate.odilelabs.com with G"},{"name":"gate_add_app","description":"Give one app its own key and the calls it may make. Routes are rules like \"GET /orders/:id\", \"POST /orders\", \"GET /users/{user}/orders\" (per-user), or example c"},{"name":"gate_list_apps","description":"The project's apps with their allowed calls, limits, state and anomaly-guard settings."},{"name":"gate_check_setup","description":"Read actual Gate protection settings before giving an integration production access. Reports observe-only mode, writes without mandatory runs, missing user-toke"},{"name":"gate_metrics","description":"Read last-24-hour stored call counts by HTTP status and reason, measured duration through response headers (including upstream wait), per-app anomaly scores and"},{"name":"gate_audit","description":"The most recent calls through the gateway (time, app, matched route, status, reason, duration), newest first, with totals by status and refusal reason. Gate nev"},{"name":"gate_create_run","description":"Gate Actions: give one agent session narrow, expiring permission. Actions are rules with {placeholders} bound by scope (e.g. \"PATCH /customers/{customer}/ticket"},{"name":"gate_set_app_runs","description":"Make an app need a run: \"writes\" (every write needs x-odile-run), \"all\" (every call), or \"off\"."},{"name":"gate_set_response","description":"Opt-in JSON response redaction: return only explicit JSON Pointer paths, e.g. /id and /items/*/name. * matches one segment; selecting a container allows its who"},{"name":"gate_add_approver","description":"Create an approver key for the person who approves held actions (shown once). Give it to that person, never to an agent: once a project has an approver, the adm"},{"name":"gate_list_actions","description":"Actions waiting for approval (or in another state), with the exact call. With an installed approval-risk model, pending actions sort by risk descending and incl"},{"name":"gate_explain_refusal","description":"What a Gate refusal means and how to fix it, from the x-gate-refused header value (e.g. route_not_allowed)."},{"name":"gate_delegate_run","description":"Hand a narrower run to another active app in the same project. Uses the parent app key and run token, never the admin key. Scope, expiry, approvals and ancestor"},{"name":"gate_learn_suggestions","description":"Read normalized routes and a suggested per-minute limit from an admin-enabled, time-boxed learning session. Records only method, normalized path templates and c"},{"name":"gate_audit_proof","description":"Read chained audit rows, decided-action feature snapshots and anchors with an HMAC-SHA256 signature. No sealed paths/bodies, notes, keys or IPs in the action la"},{"name":"gate_audit_verify","description":"Recompute a pasted export chain and project signature; returns intact or broken_at (one-based row position). Does not approve actions or change permissions."},{"name":"gate_run_tree","description":"Read a run and its delegated descendants without tokens."},{"name":"gate_run_timeline","description":"Read call metadata, approvals and approver names, recovery outcomes and delegated children; no bodies or query values."},{"name":"gate_validate_config","description":"Parse and check a declarative Gate config (apps, routes, rate limits, run mode, plugins including anomaly-guard, alerts, approvers) without changing anything. a"},{"name":"gate_sync_declarative","description":"Make a Gate project match an odile.yaml: creates the project (if no project_id) and missing apps and approvers, applies run mode, loop, learning and anomaly-gua"}],"toolCount":21,"toolsHash":"4c2f7bfe655a6c6ac8be2a0a78528214a5835aca15da14027530dfc4950f0a39","serverName":"com.odilelabs/gate","capabilities":["tools"],"serverVersion":"1.6.0","protocolVersion":"2025-06-18"}},{"at":"2026-10-24T17:34:03.586Z","kind":"mcp_initialize","ok":true,"httpStatus":200,"latencyMs":88,"error":null,"detail":{"tools":[{"name":"gate_openshell_setup","description":"Read-only local setup plan for native OpenShell + Gate: one command, exact installer hash, recipe schema, prerequisites, authority boundaries and cleanup. Defau"},{"name":"gate_create_project","description":"Create a Free project in front of an existing HTTPS API. No signup or payment required. For a credential-free demo use https://sandbox.gate.odilelabs.com with G"},{"name":"gate_add_app","description":"Give one app its own key and the calls it may make. Routes are rules like \"GET /orders/:id\", \"POST /orders\", \"GET /users/{user}/orders\" (per-user), or example c"},{"name":"gate_list_apps","description":"The project's apps with their allowed calls, limits, state and anomaly-guard settings."},{"name":"gate_check_setup","description":"Read actual Gate protection settings before giving an integration production access. Reports observe-only mode, writes without mandatory runs, missing user-toke"},{"name":"gate_metrics","description":"Read last-24-hour stored call counts by HTTP status and reason, measured duration through response headers (including upstream wait), per-app anomaly scores and"},{"name":"gate_audit","description":"The most recent calls through the gateway (time, app, matched route, status, reason, duration), newest first, with totals by status and refusal reason. Gate nev"},{"name":"gate_create_run","description":"Gate Actions: give one agent session narrow, expiring permission. Actions are rules with {placeholders} bound by scope (e.g. \"PATCH /customers/{customer}/ticket"},{"name":"gate_set_app_runs","description":"Make an app need a run: \"writes\" (every write needs x-odile-run), \"all\" (every call), or \"off\"."},{"name":"gate_set_response","description":"Opt-in JSON response redaction: return only explicit JSON Pointer paths, e.g. /id and /items/*/name. * matches one segment; selecting a container allows its who"},{"name":"gate_add_approver","description":"Create an approver key for the person who approves held actions (shown once). Give it to that person, never to an agent: once a project has an approver, the adm"},{"name":"gate_list_actions","description":"Actions waiting for approval (or in another state), with the exact call. With an installed approval-risk model, pending actions sort by risk descending and incl"},{"name":"gate_explain_refusal","description":"What a Gate refusal means and how to fix it, from the x-gate-refused header value (e.g. route_not_allowed)."},{"name":"gate_delegate_run","description":"Hand a narrower run to another active app in the same project. Uses the parent app key and run token, never the admin key. Scope, expiry, approvals and ancestor"},{"name":"gate_learn_suggestions","description":"Read normalized routes and a suggested per-minute limit from an admin-enabled, time-boxed learning session. Records only method, normalized path templates and c"},{"name":"gate_audit_proof","description":"Read chained audit rows, decided-action feature snapshots and anchors with an HMAC-SHA256 signature. No sealed paths/bodies, notes, keys or IPs in the action la"},{"name":"gate_audit_verify","description":"Recompute a pasted export chain and project signature; returns intact or broken_at (one-based row position). Does not approve actions or change permissions."},{"name":"gate_run_tree","description":"Read a run and its delegated descendants without tokens."},{"name":"gate_run_timeline","description":"Read call metadata, approvals and approver names, recovery outcomes and delegated children; no bodies or query values."},{"name":"gate_validate_config","description":"Parse and check a declarative Gate config (apps, routes, rate limits, run mode, plugins including anomaly-guard, alerts, approvers) without changing anything. a"},{"name":"gate_sync_declarative","description":"Make a Gate project match an odile.yaml: creates the project (if no project_id) and missing apps and approvers, applies run mode, loop, learning and anomaly-gua"}],"toolCount":21,"toolsHash":"4c2f7bfe655a6c6ac8be2a0a78528214a5835aca15da14027530dfc4950f0a39","serverName":"com.odilelabs/gate","capabilities":["tools"],"serverVersion":"1.6.0","protocolVersion":"2025-06-18"}},{"at":"2026-10-24T10:24:00.486Z","kind":"mcp_initialize","ok":true,"httpStatus":200,"latencyMs":41,"error":null,"detail":{"tools":[{"name":"gate_openshell_setup","description":"Read-only local setup plan for native OpenShell + Gate: one command, exact installer hash, recipe schema, prerequisites, authority boundaries and cleanup. Defau"},{"name":"gate_create_project","description":"Put Odile Gate in front of an existing HTTPS API. Returns project_id, admin_key (shown once) and the gateway base URL apps call instead of the API."},{"name":"gate_add_app","description":"Give one app its own key and the calls it may make. Routes are rules like \"GET /orders/:id\", \"POST /orders\", \"GET /users/{user}/orders\" (per-user), or example c"},{"name":"gate_list_apps","description":"The project's apps with their allowed calls, limits, state and anomaly-guard settings."},{"name":"gate_check_setup","description":"Read actual Gate protection settings before giving an integration production access. Reports observe-only mode, writes without mandatory runs, missing user-toke"},{"name":"gate_metrics","description":"Read last-24-hour stored call counts by HTTP status and reason, measured duration through response headers (including upstream wait), per-app anomaly scores and"},{"name":"gate_audit","description":"The most recent calls through the gateway (time, app, matched route, status, reason, duration), newest first, with totals by status and refusal reason. Gate nev"},{"name":"gate_create_run","description":"Gate Actions: give one agent session narrow, expiring permission. Actions are rules with {placeholders} bound by scope (e.g. \"PATCH /customers/{customer}/ticket"},{"name":"gate_set_app_runs","description":"Make an app need a run: \"writes\" (every write needs x-odile-run), \"all\" (every call), or \"off\"."},{"name":"gate_set_response","description":"Opt-in JSON response redaction: return only explicit JSON Pointer paths, e.g. /id and /items/*/name. * matches one segment; selecting a container allows its who"},{"name":"gate_add_approver","description":"Create an approver key for the person who approves held actions (shown once). Give it to that person, never to an agent: once a project has an approver, the adm"},{"name":"gate_list_actions","description":"Actions waiting for approval (or in another state), with the exact call. With an installed approval-risk model, pending actions sort by risk descending and incl"},{"name":"gate_explain_refusal","description":"What a Gate refusal means and how to fix it, from the x-gate-refused header value (e.g. route_not_allowed)."},{"name":"gate_delegate_run","description":"Hand a narrower run to another active app in the same project. Uses the parent app key and run token, never the admin key. Scope, expiry, approvals and ancestor"},{"name":"gate_learn_suggestions","description":"Read normalized routes and a suggested per-minute limit from an admin-enabled, time-boxed learning session. Records only method, normalized path templates and c"},{"name":"gate_audit_proof","description":"Read chained audit rows, decided-action feature snapshots and anchors with an HMAC-SHA256 signature. No sealed paths/bodies, notes, keys or IPs in the action la"},{"name":"gate_audit_verify","description":"Recompute a pasted export chain and project signature; returns intact or broken_at (one-based row position). Does not approve actions or change permissions."},{"name":"gate_run_tree","description":"Read a run and its delegated descendants without tokens."},{"name":"gate_run_timeline","description":"Read call metadata, approvals and approver names, recovery outcomes and delegated children; no bodies or query values."},{"name":"gate_validate_config","description":"Parse and check a declarative Gate config (apps, routes, rate limits, run mode, plugins including anomaly-guard, alerts, approvers) without changing anything. a"},{"name":"gate_sync_declarative","description":"Make a Gate project match an odile.yaml: creates the project (if no project_id) and missing apps and approvers, applies run mode, loop, learning and anomaly-gua"}],"toolCount":21,"toolsHash":"1abcdc912932c61e87e0daee9dbf432837136b55974510372926f2fe827f04a9","serverName":"odile-gate","capabilities":["tools"],"serverVersion":"1.6.0","protocolVersion":"2025-06-18"}},{"at":"2026-10-24T03:20:44.963Z","kind":"mcp_initialize","ok":true,"httpStatus":200,"latencyMs":41,"error":null,"detail":{"tools":[{"name":"gate_openshell_setup","description":"Read-only local setup plan for native OpenShell + Gate: one command, exact installer hash, recipe schema, prerequisites, authority boundaries and cleanup. Defau"},{"name":"gate_create_project","description":"Put Odile Gate in front of an existing HTTPS API. Returns project_id, admin_key (shown once) and the gateway base URL apps call instead of the API."},{"name":"gate_add_app","description":"Give one app its own key and the calls it may make. Routes are rules like \"GET /orders/:id\", \"POST /orders\", \"GET /users/{user}/orders\" (per-user), or example c"},{"name":"gate_list_apps","description":"The project's apps with their allowed calls, limits, state and anomaly-guard settings."},{"name":"gate_check_setup","description":"Read actual Gate protection settings before giving an integration production access. Reports observe-only mode, writes without mandatory runs, missing user-toke"},{"name":"gate_metrics","description":"Read last-24-hour stored call counts by HTTP status and reason, measured duration through response headers (including upstream wait), per-app anomaly scores and"},{"name":"gate_audit","description":"The most recent calls through the gateway (time, app, matched route, status, reason, duration), newest first, with totals by status and refusal reason. Gate nev"},{"name":"gate_create_run","description":"Gate Actions: give one agent session narrow, expiring permission. Actions are rules with {placeholders} bound by scope (e.g. \"PATCH /customers/{customer}/ticket"},{"name":"gate_set_app_runs","description":"Make an app need a run: \"writes\" (every write needs x-odile-run), \"all\" (every call), or \"off\"."},{"name":"gate_set_response","description":"Opt-in JSON response redaction: return only explicit JSON Pointer paths, e.g. /id and /items/*/name. * matches one segment; selecting a container allows its who"},{"name":"gate_add_approver","description":"Create an approver key for the person who approves held actions (shown once). Give it to that person, never to an agent: once a project has an approver, the adm"},{"name":"gate_list_actions","description":"Actions waiting for approval (or in another state), with the exact call. With an installed approval-risk model, pending actions sort by risk descending and incl"},{"name":"gate_explain_refusal","description":"What a Gate refusal means and how to fix it, from the x-gate-refused header value (e.g. route_not_allowed)."},{"name":"gate_delegate_run","description":"Hand a narrower run to another active app in the same project. Uses the parent app key and run token, never the admin key. Scope, expiry, approvals and ancestor"},{"name":"gate_learn_suggestions","description":"Read normalized routes and a suggested per-minute limit from an admin-enabled, time-boxed learning session. Records only method, normalized path templates and c"},{"name":"gate_audit_proof","description":"Read chained audit rows, decided-action feature snapshots and anchors with an HMAC-SHA256 signature. No sealed paths/bodies, notes, keys or IPs in the action la"},{"name":"gate_audit_verify","description":"Recompute a pasted export chain and project signature; returns intact or broken_at (one-based row position). Does not approve actions or change permissions."},{"name":"gate_run_tree","description":"Read a run and its delegated descendants without tokens."},{"name":"gate_run_timeline","description":"Read call metadata, approvals and approver names, recovery outcomes and delegated children; no bodies or query values."},{"name":"gate_validate_config","description":"Parse and check a declarative Gate config (apps, routes, rate limits, run mode, plugins including anomaly-guard, alerts, approvers) without changing anything. a"},{"name":"gate_sync_declarative","description":"Make a Gate project match an odile.yaml: creates the project (if no project_id) and missing apps and approvers, applies run mode, loop, learning and anomaly-gua"}],"toolCount":21,"toolsHash":"1abcdc912932c61e87e0daee9dbf432837136b55974510372926f2fe827f04a9","serverName":"odile-gate","capabilities":["tools"],"serverVersion":"1.6.0","protocolVersion":"2025-06-18"}},{"at":"2026-10-23T20:26:06.196Z","kind":"mcp_initialize","ok":true,"httpStatus":200,"latencyMs":53,"error":null,"detail":{"tools":[{"name":"gate_create_project","description":"Put Odile Gate in front of an existing HTTPS API. Returns project_id, admin_key (shown once) and the gateway base URL apps call instead of the API."},{"name":"gate_add_app","description":"Give one app its own key and the calls it may make. Routes are rules like \"GET /orders/:id\", \"POST /orders\", \"GET /users/{user}/orders\" (per-user), or example c"},{"name":"gate_list_apps","description":"The project's apps with their allowed calls, limits and state."},{"name":"gate_check_setup","description":"Read actual Gate protection settings before giving an integration production access. Reports observe-only mode, writes without mandatory runs, missing user-toke"},{"name":"gate_metrics","description":"Read last-24-hour stored call counts by HTTP status and reason, measured duration through response headers (including upstream wait), and separate current-month"},{"name":"gate_audit","description":"The most recent calls through the gateway (time, app, matched route, status, reason, duration), newest first, with totals by status and refusal reason. Gate nev"},{"name":"gate_create_run","description":"Gate Actions: give one agent session narrow, expiring permission. Actions are rules with {placeholders} bound by scope (e.g. \"PATCH /customers/{customer}/ticket"},{"name":"gate_set_app_runs","description":"Make an app need a run: \"writes\" (every write needs x-odile-run), \"all\" (every call), or \"off\"."},{"name":"gate_set_response","description":"Opt-in JSON response redaction: return only explicit JSON Pointer paths, e.g. /id and /items/*/name. * matches one segment; selecting a container allows its who"},{"name":"gate_add_approver","description":"Create an approver key for the person who approves held actions (shown once). Give it to that person, never to an agent: once a project has an approver, the adm"},{"name":"gate_list_actions","description":"Actions waiting for approval (or in another state), with the exact call. Approving is done by a person in the dashboard, not by a tool."},{"name":"gate_explain_refusal","description":"What a Gate refusal means and how to fix it, from the x-gate-refused header value (e.g. route_not_allowed)."},{"name":"gate_delegate_run","description":"Hand a narrower run to another active app in the same project. Uses the parent app key and run token, never the admin key. Scope, expiry, approvals and ancestor"},{"name":"gate_learn_suggestions","description":"Read normalized routes and a suggested per-minute limit from an admin-enabled, time-boxed learning session. Records only method, normalized path templates and c"},{"name":"gate_audit_proof","description":"Read chained audit rows and their anchors with an HMAC-SHA256 signature. Old rows before genesis are excluded; store_audit=false projects have no chain. Row-id "},{"name":"gate_audit_verify","description":"Recompute a pasted export chain and project signature; returns intact or broken_at (one-based row position). Does not approve actions or change permissions."},{"name":"gate_run_tree","description":"Read a run and its delegated descendants without tokens."},{"name":"gate_run_timeline","description":"Read call metadata, approvals and approver names, recovery outcomes and delegated children; no bodies or query values."},{"name":"gate_validate_config","description":"Parse and check a declarative Gate config (apps, routes, rate limits, run mode, plugins, alerts, approvers) without changing anything. Returns errors with their"},{"name":"gate_sync_declarative","description":"Make a Gate project match an odile.yaml: creates the project (if no project_id) and missing apps and approvers, applies run mode, loop and learning settings and"}],"toolCount":20,"toolsHash":"c43ba3fd4c0f756fe82f49c3658c0178c3429e7f4f0733116d96de78f752c9ef","serverName":"odile-gate","capabilities":["tools"],"serverVersion":"1.5.0","protocolVersion":"2025-06-18"}},{"at":"2026-10-23T14:28:42.701Z","kind":"mcp_initialize","ok":true,"httpStatus":200,"latencyMs":67,"error":null,"detail":{"tools":[{"name":"gate_create_project","description":"Put Odile Gate in front of an existing HTTPS API. Returns project_id, admin_key (shown once) and the gateway base URL apps call instead of the API."},{"name":"gate_add_app","description":"Give one app its own key and the calls it may make. Routes are rules like \"GET /orders/:id\", \"POST /orders\", \"GET /users/{user}/orders\" (per-user), or example c"},{"name":"gate_list_apps","description":"The project's apps with their allowed calls, limits and state."},{"name":"gate_check_setup","description":"Read actual Gate protection settings before giving an integration production access. Reports observe-only mode, writes without mandatory runs, missing user-toke"},{"name":"gate_metrics","description":"Read last-24-hour stored call counts by HTTP status and reason, measured duration through response headers (including upstream wait), and separate current-month"},{"name":"gate_audit","description":"The most recent calls through the gateway (time, app, matched route, status, reason, duration), newest first, with totals by status and refusal reason. Gate nev"},{"name":"gate_create_run","description":"Gate Actions: give one agent session narrow, expiring permission. Actions are rules with {placeholders} bound by scope (e.g. \"PATCH /customers/{customer}/ticket"},{"name":"gate_set_app_runs","description":"Make an app need a run: \"writes\" (every write needs x-odile-run), \"all\" (every call), or \"off\"."},{"name":"gate_set_response","description":"Opt-in JSON response redaction: return only explicit JSON Pointer paths, e.g. /id and /items/*/name. * matches one segment; selecting a container allows its who"},{"name":"gate_add_approver","description":"Create an approver key for the person who approves held actions (shown once). Give it to that person, never to an agent: once a project has an approver, the adm"},{"name":"gate_list_actions","description":"Actions waiting for approval (or in another state), with the exact call. Approving is done by a person in the dashboard, not by a tool."},{"name":"gate_explain_refusal","description":"What a Gate refusal means and how to fix it, from the x-gate-refused header value (e.g. route_not_allowed)."},{"name":"gate_delegate_run","description":"Hand a narrower run to another active app in the same project. Uses the parent app key and run token, never the admin key. Scope, expiry, approvals and ancestor"},{"name":"gate_learn_suggestions","description":"Read normalized routes and a suggested per-minute limit from an admin-enabled, time-boxed learning session. Records only method, normalized path templates and c"},{"name":"gate_audit_proof","description":"Read chained audit rows and their anchors with an HMAC-SHA256 signature. Old rows before genesis are excluded; store_audit=false projects have no chain. Row-id "},{"name":"gate_audit_verify","description":"Recompute a pasted export chain and project signature; returns intact or broken_at (one-based row position). Does not approve actions or change permissions."},{"name":"gate_run_tree","description":"Read a run and its delegated descendants without tokens."},{"name":"gate_run_timeline","description":"Read call metadata, approvals and approver names, recovery outcomes and delegated children; no bodies or query values."},{"name":"gate_validate_config","description":"Parse and check a declarative Gate config (apps, routes, rate limits, run mode, plugins, alerts, approvers) without changing anything. Returns errors with their"},{"name":"gate_sync_declarative","description":"Make a Gate project match an odile.yaml: creates the project (if no project_id) and missing apps and approvers, applies run mode, loop and learning settings and"}],"toolCount":20,"toolsHash":"c43ba3fd4c0f756fe82f49c3658c0178c3429e7f4f0733116d96de78f752c9ef","serverName":"odile-gate","capabilities":["tools"],"serverVersion":"1.5.0","protocolVersion":"2025-06-18"}},{"at":"2026-10-23T07:28:13.399Z","kind":"mcp_initialize","ok":true,"httpStatus":200,"latencyMs":16,"error":null,"detail":{"tools":[{"name":"gate_create_project","description":"Put Odile Gate in front of an existing HTTPS API. Returns project_id, admin_key (shown once) and the gateway base URL apps call instead of the API."},{"name":"gate_add_app","description":"Give one app its own key and the calls it may make. Routes are rules like \"GET /orders/:id\", \"POST /orders\", \"GET /users/{user}/orders\" (per-user), or example c"},{"name":"gate_list_apps","description":"The project's apps with their allowed calls, limits and state."},{"name":"gate_check_setup","description":"Read actual Gate protection settings before giving an integration production access. Reports observe-only mode, writes without mandatory runs, missing user-toke"},{"name":"gate_metrics","description":"Read last-24-hour stored call counts by HTTP status and reason, measured duration through response headers (including upstream wait), and separate current-month"},{"name":"gate_audit","description":"The most recent calls through the gateway (time, app, matched route, status, reason, duration), newest first, with totals by status and refusal reason. Gate nev"},{"name":"gate_create_run","description":"Gate Actions: give one agent session narrow, expiring permission. Actions are rules with {placeholders} bound by scope (e.g. \"PATCH /customers/{customer}/ticket"},{"name":"gate_set_app_runs","description":"Make an app need a run: \"writes\" (every write needs x-odile-run), \"all\" (every call), or \"off\"."},{"name":"gate_set_response","description":"Opt-in JSON response redaction: return only explicit JSON Pointer paths, e.g. /id and /items/*/name. * matches one segment; selecting a container allows its who"},{"name":"gate_add_approver","description":"Create an approver key for the person who approves held actions (shown once). Give it to that person, never to an agent: once a project has an approver, the adm"},{"name":"gate_list_actions","description":"Actions waiting for approval (or in another state), with the exact call. Approving is done by a person in the dashboard, not by a tool."},{"name":"gate_explain_refusal","description":"What a Gate refusal means and how to fix it, from the x-gate-refused header value (e.g. route_not_allowed)."},{"name":"gate_delegate_run","description":"Hand a narrower run to another active app in the same project. Uses the parent app key and run token, never the admin key. Scope, expiry, approvals and ancestor"},{"name":"gate_learn_suggestions","description":"Read normalized routes and a suggested per-minute limit from an admin-enabled, time-boxed learning session. Records only method, normalized path templates and c"},{"name":"gate_audit_proof","description":"Read chained audit rows and their anchors with an HMAC-SHA256 signature. Old rows before genesis are excluded; store_audit=false projects have no chain. Row-id "},{"name":"gate_audit_verify","description":"Recompute a pasted export chain and project signature; returns intact or broken_at (one-based row position). Does not approve actions or change permissions."},{"name":"gate_run_tree","description":"Read a run and its delegated descendants without tokens."},{"name":"gate_run_timeline","description":"Read call metadata, approvals and approver names, recovery outcomes and delegated children; no bodies or query values."},{"name":"gate_validate_config","description":"Parse and check a declarative Gate config (apps, routes, rate limits, run mode, plugins, alerts, approvers) without changing anything. Returns errors with their"},{"name":"gate_sync_declarative","description":"Make a Gate project match an odile.yaml: creates the project (if no project_id) and missing apps and approvers, applies run mode, loop and learning settings and"}],"toolCount":20,"toolsHash":"c43ba3fd4c0f756fe82f49c3658c0178c3429e7f4f0733116d96de78f752c9ef","serverName":"odile-gate","capabilities":["tools"],"serverVersion":"1.5.0","protocolVersion":"2025-06-18"}},{"at":"2026-10-23T01:31:30.962Z","kind":"mcp_initialize","ok":true,"httpStatus":200,"latencyMs":33,"error":null,"detail":{"tools":[{"name":"gate_create_project","description":"Put Odile Gate in front of an existing HTTPS API. Returns project_id, admin_key (shown once) and the gateway base URL apps call instead of the API."},{"name":"gate_add_app","description":"Give one app its own key and the calls it may make. Routes are rules like \"GET /orders/:id\", \"POST /orders\", \"GET /users/{user}/orders\" (per-user), or example c"},{"name":"gate_list_apps","description":"The project's apps with their allowed calls, limits and state."},{"name":"gate_check_setup","description":"Read actual Gate protection settings before giving an integration production access. Reports observe-only mode, writes without mandatory runs, missing user-toke"},{"name":"gate_metrics","description":"Read last-24-hour stored call counts by HTTP status and reason, measured duration through response headers (including upstream wait), and separate current-month"},{"name":"gate_audit","description":"The most recent calls through the gateway (time, app, matched route, status, reason, duration), newest first, with totals by status and refusal reason. Gate nev"},{"name":"gate_create_run","description":"Gate Actions: give one agent session narrow, expiring permission. Actions are rules with {placeholders} bound by scope (e.g. \"PATCH /customers/{customer}/ticket"},{"name":"gate_set_app_runs","description":"Make an app need a run: \"writes\" (every write needs x-odile-run), \"all\" (every call), or \"off\"."},{"name":"gate_set_response","description":"Opt-in JSON response redaction: return only explicit JSON Pointer paths, e.g. /id and /items/*/name. * matches one segment; selecting a container allows its who"},{"name":"gate_add_approver","description":"Create an approver key for the person who approves held actions (shown once). Give it to that person, never to an agent: once a project has an approver, the adm"},{"name":"gate_list_actions","description":"Actions waiting for approval (or in another state), with the exact call. Approving is done by a person in the dashboard, not by a tool."},{"name":"gate_explain_refusal","description":"What a Gate refusal means and how to fix it, from the x-gate-refused header value (e.g. route_not_allowed)."},{"name":"gate_delegate_run","description":"Hand a narrower run to another active app in the same project. Uses the parent app key and run token, never the admin key. Scope, expiry, approvals and ancestor"},{"name":"gate_learn_suggestions","description":"Read normalized routes and a suggested per-minute limit from an admin-enabled, time-boxed learning session. Records only method, normalized path templates and c"},{"name":"gate_audit_proof","description":"Read chained audit rows and their anchors with an HMAC-SHA256 signature. Old rows before genesis are excluded; store_audit=false projects have no chain. Row-id "},{"name":"gate_audit_verify","description":"Recompute a pasted export chain and project signature; returns intact or broken_at (one-based row position). Does not approve actions or change permissions."},{"name":"gate_run_tree","description":"Read a run and its delegated descendants without tokens."},{"name":"gate_run_timeline","description":"Read call metadata, approvals and approver names, recovery outcomes and delegated children; no bodies or query values."},{"name":"gate_validate_config","description":"Parse and check a declarative Gate config (apps, routes, rate limits, run mode, plugins, alerts, approvers) without changing anything. Returns errors with their"},{"name":"gate_sync_declarative","description":"Make a Gate project match an odile.yaml: creates the project (if no project_id) and missing apps and approvers, applies run mode, loop and learning settings and"}],"toolCount":20,"toolsHash":"c43ba3fd4c0f756fe82f49c3658c0178c3429e7f4f0733116d96de78f752c9ef","serverName":"odile-gate","capabilities":["tools"],"serverVersion":"1.5.0","protocolVersion":"2025-06-18"}}],"tools":[{"name":"gate_openshell_setup","description":"Read-only local setup plan for native OpenShell + Gate: one command, exact installer hash, recipe schema, prerequisites, authority boundaries and cleanup. Defau"},{"name":"gate_create_project","description":"Create a Free project in front of an existing HTTPS API. No signup or payment required. For a credential-free demo use https://sandbox.gate.odilelabs.com with G"},{"name":"gate_add_app","description":"Give one app its own key and the calls it may make. Routes are rules like \"GET /orders/:id\", \"POST /orders\", \"GET /users/{user}/orders\" (per-user), or example c"},{"name":"gate_list_apps","description":"The project's apps with their allowed calls, limits, state and anomaly-guard settings."},{"name":"gate_check_setup","description":"Read actual Gate protection settings before giving an integration production access. Reports observe-only mode, writes without mandatory runs, missing user-toke"},{"name":"gate_metrics","description":"Read last-24-hour stored call counts by HTTP status and reason, measured duration through response headers (including upstream wait), per-app anomaly scores and"},{"name":"gate_audit","description":"The most recent calls through the gateway (time, app, matched route, status, reason, duration), newest first, with totals by status and refusal reason. Gate nev"},{"name":"gate_create_run","description":"Gate Actions: give one agent session narrow, expiring permission. Actions are rules with {placeholders} bound by scope (e.g. \"PATCH /customers/{customer}/ticket"},{"name":"gate_set_app_runs","description":"Make an app need a run: \"writes\" (every write needs x-odile-run), \"all\" (every call), or \"off\"."},{"name":"gate_set_response","description":"Opt-in JSON response redaction: return only explicit JSON Pointer paths, e.g. /id and /items/*/name. * matches one segment; selecting a container allows its who"},{"name":"gate_add_approver","description":"Create an approver key for the person who approves held actions (shown once). Give it to that person, never to an agent: once a project has an approver, the adm"},{"name":"gate_list_actions","description":"Actions waiting for approval (or in another state), with the exact call. With an installed approval-risk model, pending actions sort by risk descending and incl"},{"name":"gate_explain_refusal","description":"What a Gate refusal means and how to fix it, from the x-gate-refused header value (e.g. route_not_allowed)."},{"name":"gate_delegate_run","description":"Hand a narrower run to another active app in the same project. Uses the parent app key and run token, never the admin key. Scope, expiry, approvals and ancestor"},{"name":"gate_learn_suggestions","description":"Read normalized routes and a suggested per-minute limit from an admin-enabled, time-boxed learning session. Records only method, normalized path templates and c"},{"name":"gate_audit_proof","description":"Read chained audit rows, decided-action feature snapshots and anchors with an HMAC-SHA256 signature. No sealed paths/bodies, notes, keys or IPs in the action la"},{"name":"gate_audit_verify","description":"Recompute a pasted export chain and project signature; returns intact or broken_at (one-based row position). Does not approve actions or change permissions."},{"name":"gate_run_tree","description":"Read a run and its delegated descendants without tokens."},{"name":"gate_run_timeline","description":"Read call metadata, approvals and approver names, recovery outcomes and delegated children; no bodies or query values."},{"name":"gate_validate_config","description":"Parse and check a declarative Gate config (apps, routes, rate limits, run mode, plugins including anomaly-guard, alerts, approvers) without changing anything. a"},{"name":"gate_sync_declarative","description":"Make a Gate project match an odile.yaml: creates the project (if no project_id) and missing apps and approvers, applies run mode, loop, learning and anomaly-gua"}],"package":null,"toolSurface":{"id":"ts_sk3x2cg4fq6y","endpointId":"ep_ea8hjw5e7m6p","hash":"4c2f7bfe655a6c6ac8be2a0a78528214a5835aca15da14027530dfc4950f0a39","toolCount":21,"serverName":"com.odilelabs/gate","serverVersion":"1.6.0","protocolVersion":"2025-06-18","firstSeenAt":"2026-10-24T17:34:03.594Z","lastSeenAt":"2026-10-25T15:27:31.119Z","observations":4,"toolNames":["gate_openshell_setup","gate_create_project","gate_add_app","gate_list_apps","gate_check_setup","gate_metrics","gate_audit","gate_create_run","gate_set_app_runs","gate_set_response","gate_add_approver","gate_list_actions","gate_explain_refusal","gate_delegate_run","gate_learn_suggestions","gate_audit_proof","gate_audit_verify","gate_run_tree","gate_run_timeline","gate_validate_config","gate_sync_declarative"],"distinctSurfaces":5},"endpointFacts":[{"id":"ep_ea8hjw5e7m6p","url":"https://gate.odilelabs.com/mcp","type":"mcp_streamable_http","factsCheckedAt":"2026-10-24T03:20:44.987Z","auth":{"observedAt":"2026-10-24T03:20:45.025Z","authRequired":false,"scheme":null,"resourceMetadata":null,"authorizationServer":null,"conformance":{"dpop":false,"rfc8414":false,"rfc9728":false,"pkceS256":false,"clientIdMetadataDocument":false,"dynamicClientRegistration":false}},"tls":{"observedAt":"2026-10-24T03:20:45.043Z","protocol":"TLSv1.3","chainValid":true,"chainError":null,"hostMatches":true,"subject":"odilelabs.com","issuer":{"commonName":"WE1","organization":"Google Trust Services"},"validFrom":"2026-10-19T03:15:09.000Z","validTo":"2027-01-17T04:15:06.000Z","daysToExpiry":83,"sanCount":3,"fingerprint256":"AA:4E:90:72:91:60:D3:C5:D2:A4:DA:25:C3:9F:0C:43:71:E5:C4:85:7C:9F:DB:1F:98:E9:3C:A4:8C:EC:7A:AC"}}]},"verification":{"claimed":false,"claimedAt":null,"proofs":[]},"provenance":{"sources":[{"source":"mcp_registry","key":"com.odilelabs/gate","url":"https://registry.modelcontextprotocol.io/v0/servers/com.odilelabs%2Fgate","firstSeenAt":"2026-10-21T23:19:38.040Z","fetchedAt":"2026-10-25T08:18:49.207Z","normalizedAt":"2026-10-25T08:18:49.207Z"}]},"firstSeenAt":"2026-10-21T23:19:38.040Z","updatedAt":"2026-10-25T15:31:58.555Z"}