Ogen
Server Details
Eight tools an agent uses; ten more for operating your tenant. Patent pending.
- Status
- Healthy
- Uptime
- 99.0% over 21 days
- Last Tested
- Transport
- Streamable HTTP · MCP 2025-11-25
- URL
TDQS
Scored across 18 tools
Most tools target distinct purposes (binding, recalling, gating, approving, reporting), but a reporting trio—audit_log, what_it_caught, export_evidence—overlaps in output intent, and list_holds vs explain_hold sit close together. settings is a large catch-all whose sub-actions (contact, evidence, assist, caller_*) partly bleed into other tools.
The dominant convention is snake_case verb_noun (bind_source, recall_live_fact, register_approver, commit_gated_action), which is applied consistently across action-oriented tools. Deviations are minor: a few noun-only resource names (connections, settings, webhook) and the bare verb reverse break the pattern but remain readable.
18 tools is on the heavier side but each maps to a genuine part of the governance workflow (source binding, fact recall, action gating, holds, evidence, administration). It is reasonable for a platform this broad, though a few tools could arguably be consolidated.
The surface covers the full lifecycle: bind sources, discover fields, recall facts, register actions/approvers, gate and release actions, manage holds, correct, report, export evidence, and configure settings. Minor gap: no explicit tool to unregister an action kind or approver, only reverse for individual actions.
Available Tools
18 toolsaudit_logAudit a past logBInspect
Paste a log of your agent's past reads and actions and see how many times it would have acted on stale or uncertain data. Nothing is stored. Free and pro.
| Name | Required | Description | Default |
|---|---|---|---|
| events | Yes | Up to 2,000 past events, oldest or newest first. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the behavioral burden, and it does add non-obvious traits: 'Nothing is stored' signals statelessness, and 'Free and pro' hints at no paywall gating. It does not disclose the output format, failure behavior for malformed events, or how 'stale or uncertain' is determined. The 'Free and pro' line is low-signal filler.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences, with the core behavior in the first sentence and the statelessness guarantee in the second. The final 'Free and pro' is marketing filler that does not help an agent invoke the tool correctly, so it slightly undermines the otherwise tight structure.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a one-parameter, stateless analysis tool with no output schema, the description conveys the input (a log) and the gist of the output (a count of stale/uncertain actions), which is workable. But with no annotations or output schema, the agent is left to infer the exact return shape, error handling, and the criteria for 'stale or uncertain'. Some details live in the schema (ordering, ISO timestamps, item caps), so the overall picture is adequate rather than complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with the schema documenting the events array, its item fields (at, kind, acted, candidates, later_corrected), ordering, and the 2,000-item cap, so the baseline is 3. The description's 'log of your agent's past reads and actions' loosely maps to the events property but adds no per-field semantics beyond what the schema already provides. No compensation is needed, but no extra value is added either.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Paste... and see') and resource: a log of the agent's past reads and actions, and it defines the result as a count of actions that would have been taken on stale or uncertain data. This clearly conveys what the tool does and what it returns. It does not explicitly contrast with sibling tools, though the offline-log analysis purpose is fairly distinct from the live-operation siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies the usage context: an agent that has a log of past reads/actions and wants to know how many would have acted on stale or uncertain data. It offers the input format indirectly ('Paste a log of your agent's past reads and actions') but gives no explicit guidance on when to prefer this over related siblings like recall_live_fact or what_it_caught, and no exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
bind_sourceBind a live sourceAInspect
Bind a key to a live, read-only source: a JSON endpoint, a Postgres/Supabase table, an Airtable table, a Google Sheet, a HubSpot object, a tool on another MCP server, a Salesforce SOQL query, a NetSuite SuiteQL query, a one-row SELECT against a raw Postgres database, or a Priority ERP OData read. Every recall reads it fresh — nothing here is cached as truth. Record only.
| Name | Required | Description | Default |
|---|---|---|---|
| key | Yes | The key to bind. | |
| url | No | For a plain JSON endpoint: an https:// URL, the live source for this key. Omit when using `source` instead. | |
| field | No | For a plain JSON endpoint only: an optional dotted path to one value in the response, e.g. "status" or "data.items.0.total" (object keys or array indexes, up to 16 segments). Recall then answers with just that value. A missing path, a body that isn't JSON, or a null there comes back unavailable with reason field_missing, not_json or field_null, and a detail naming the missing segment. Omit it to get the whole body. | |
| source | No | Instead of a plain endpoint: a Postgres/Supabase table (postgrest), an Airtable table, a Google Sheet, a HubSpot object, a tool on another MCP server (mcp), a Salesforce SOQL query (salesforce), a NetSuite SuiteQL query (netsuite), a one-row SELECT against a raw Postgres database (postgres) — direct SQL, read-only — or a Priority ERP OData read (priority): base_url, username/password (or Priority's own application credentials, sent the same way), form, filter, field. Fields depend on kind. For salesforce/netsuite/hubspot/airtable/postgrest/postgres/priority, pass connection: "<name>" (see connections action "set") instead of that kind's own credential fields. | |
| headers | No | For a plain JSON endpoint only: optional request headers (e.g. an auth token), up to 16. Stored encrypted at rest. | |
| alongside | No | Bind a SECOND (or third, or fourth) live source to this key instead of replacing the one it already has. When the bound systems disagree, the act holds and whoever decides sees every reading, labelled by system. Omit this (the default) to replace the key's one source, removing any other source already bound alongside it. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden, and it does disclose meaningful traits: the source is read-only, 'Every recall reads it fresh — nothing here is cached as truth' (freshness semantics), and 'Record only' (this registers a binding, it does not fetch). It stops short of stating auth/permission requirements or what happens when binding to an already-bound key, though the schema covers replacement and encryption-at-rest.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Compact and front-loaded: the core action and its read-only, fresh-read nature lead, with the source enumeration following. The long comma-separated kind list is somewhat redundant with the schema enum but is defensible as a scannable summary.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a no-output-schema configuration tool, the description plus the unusually detailed schema together cover the essentials — what binding does, source kinds, and the alongside/replace behavior. It could say more about what a successful bind returns or key-collision handling, but nothing critical is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents key, url, field, source, headers, and alongside in rich detail. The description mostly restates the source-kind list that the schema's `kind` enum already carries, adding little parameter meaning beyond what is structured.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (bind) and resource (a key to a live, read-only source) and enumerates the full set of supported source kinds, so an agent knows exactly what operation is performed. It does not, however, name or contrast itself against the obvious sibling recall_live_fact, leaving the read/write-config distinction to inference.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is only implied: 'Record only' and 'read-only source' suggest this configures a binding rather than reading data, which nudges the agent away from recall_live_fact. There is no explicit when-to-use statement, no mention of prerequisites, and no routing guidance to alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
certify_packetCertify a document packetAInspect
Certify a packet of documents against what was read out of them. Checks whether each reading actually says what it claims, and whether documents naming the same field agree. Returns, per field, whether it is certified, refuted, or unproven, which documents state it, and — when documents disagree — what each one said. Optionally checks a reading against a supplied record. release is true only when every field is certified. Record only.
| Name | Required | Description | Default |
|---|---|---|---|
| records | No | Optional: check readings against a supplied record. Up to 200 entities per call. | |
| readings | Yes | What was read out of the documents in this packet. Up to 1000 per call. | |
| documents | Yes | Every document in the packet. Up to 100 per call. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It describes the verification behavior and the release condition, but it does not explicitly state whether the operation is read-only or if it has side effects. The trailing 'Record only.' is ambiguous and could be interpreted as a read-only note, but it is not clear. More explicit disclosure of non-mutating behavior would improve transparency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single paragraph that front-loads the core purpose and then details checks, output, and the optional record. It is efficient with no filler, though the 'Record only.' phrase adds slight ambiguity. Overall, it is appropriately concise and structured.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given there is no output schema, the description explains the return format sufficiently (per-field status, documents, disagreements, release flag). It covers the parameters and their interactions. However, the ambiguous 'Record only.' and the lack of explicit error or edge-case behavior leave some gaps. For a tool with this complexity, a bit more detail would enhance completeness.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema descriptions already cover all parameters at 100% coverage, so the baseline is 3. The description adds context by explaining how readings relate to documents and how records optionally interact, but it does not add significant syntax or format details beyond the schema. The added value is moderate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: to certify a packet of documents against readings. It specifies the exact operation (checking readings, comparing fields across documents), the output (per-field status, documents stating it, disagreements), and the optional record check. This is specific and distinct from sibling tools, which mostly deal with connections, audits, and actions.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context on what the tool does, including when the optional record parameter is used and the release condition. However, it does not explicitly mention alternatives or exclusions relative to siblings. The guidance is implicit but sufficient for an agent to infer when to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
commit_gated_actionCommit a gated actionAInspect
Ask whether an action of this kind is authorized. Ogen says yes only when it is sure; anything else waits for a person, and it never guesses. Ogen never performs the action itself — your own system does that once this says yes. An unregistered kind is refused. Free tier: only the demo kinds. Record: any registered kind. Once a person confirms, calling again with the same kind returns disposition "released" and a release_ticket — give it to the system that runs the action.
| Name | Required | Description | Default |
|---|---|---|---|
| args | No | Optional: the arguments you will run the action with. Ogen keeps only their fingerprint, for the release ticket a confirmation issues. | |
| kind | Yes | An action kind, e.g. one registered with register_action. | |
| principal | No | THE HOSTED REQUESTER: required when this kind was registered with approver "principal" — the hold then waits for the person named here, never a registered approver. Refused for any other kind. Nothing but the address. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, so the description carries the full burden — and it discloses the fail-safe policy ('says yes only when it is sure... never guesses'), the human-escalation path, the refusal of unregistered kinds, and the tier limits. It stops short of enumerating the other dispositions (only 'released' is named) or stating auth/rate-limit requirements, so it is rich but not exhaustive.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core question and the key non-execution caveat. Dense and mostly waste-free, though the tier/permission fragment ('Free tier: only the demo kinds. Record: any registered kind.') is telegraphic and the release-ticket flow could be tightened.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description supplies the return semantics an agent needs (disposition and release_ticket, plus the re-call protocol), covers the nested principal object's effect, and explains error behavior for unregistered kinds. Nothing essential to calling it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents kind, args fingerprinting, and the principal/approver-matching rule in detail. The description adds only the flow context around those parameters rather than new per-parameter meaning; baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific operation ('ask whether an action of this kind is authorized') and immediately distinguishes itself from siblings: 'Ogen never performs the action itself — your own system does that.' An agent can tell this gate apart from register_action, report_outcome, or reverse without opening a schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives the when (before your system runs an action), the when-not (unregistered kinds are refused; free tier limited to demo kinds), and the follow-up path (call again with the same kind after a human confirms). Explicit lifecycle guidance rather than implied usage.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
connectionsNamed connectionsAInspect
Store a credential set once, under a name, for salesforce/netsuite/hubspot/airtable/postgrest/postgres/priority, so bind_source's source.connection can name it instead of repeating it. action "set": store or rotate one — calling it again with the same name rotates it, and every key bound to it reads the new credentials on its next read; the credential is never echoed back. action "list": name, kind, label, when created and updated — never a credential. action "remove": refused while any bound key still reads through it. Record.
| Name | Required | Description | Default |
|---|---|---|---|
| kind | No | action "set" (required): which kind of connection this is. | |
| name | No | action "set" or "remove" (required): the connection's name, e.g. 'sfdc-prod'. | |
| action | Yes | "set", "list" or "remove". |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations present, the description carries the full burden and delivers rich detail: repeated 'set' rotates credentials, bound keys pick up new credentials on next read, credentials are never echoed, list output omits credentials, and remove is refused while bound keys exist. This is exemplary disclosure of side effects and security behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is dense, front-loaded with the core purpose, and organized by action, which makes it easy to scan. The trailing fragment 'Record.' is unexplained and slightly undermines an otherwise well-structured definition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a multi-action tool with no output schema and no annotations, this covers the critical behavioral context: rotation, read propagation, never echoing credentials, and remove refusal. The main ambiguity is the 'Record.' fragment and only minimal details about what set/remove return, but callers have enough to use it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3. The description adds meaningful parameter semantics beyond the schema by explaining that calling 'set' with the same name rotates the stored credential and by linking each action to the required parameters (name/kind for set, name for remove).
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource: 'Store a credential set once, under a name,' and immediately ties its purpose to bind_source's `source.connection`. The set/list/remove actions further define its scope, making it clearly distinct from sibling tools like bind_source.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It clearly explains the use case: store credentials once and reference them by name from bind_source. It does not, however, explicitly state when not to use it or compare it with other configuration-oriented siblings like settings, so it lacks explicit exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
discover_fieldsDiscover a source's fieldsAInspect
See what a bound source exposes, so you can name keys against real fields. Reads the source once, live, and returns field names and types — never the values. Record; free on the demo keys.
| Name | Required | Description | Default |
|---|---|---|---|
| key | Yes | A bound key — its live source is read once to discover its fields. | |
| field | No | For a plain JSON endpoint: a dotted path to look under, e.g. "data" — lists the fields at that path instead of the whole body. Defaults to the field the key was bound with, if any. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the behavioral burden and covers it well: the operation is a one-time live read, returns schema information, and 'never the values,' implying a safe introspection behavior. It does not elaborate on error conditions or authentication, but the core read-only profile is disclosed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and front-loaded, opening with the purpose and then the behavioral guarantee. 'Record; free on the demo keys' is terse and somewhat cryptic, which prevents a 5.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple two-parameter introspection tool with no output schema, the description adequately explains the output shape ('field names and types') and the privacy guarantee ('never the values'). It could add failure behavior or a concrete example, but nothing essential for correct invocation is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema fully documents 'key' and 'field'. The description adds the live-read and field-names-only context, but it does not add meaningful semantics beyond what the parameter descriptions already state.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb ('see'), a specific resource ('a bound source'), and the outcome ('field names and types'), while explicitly scoping the tool to discovery rather than values. This distinguishes it from siblings like recall_live_fact or bind_source, which either return values or establish bindings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It frames when to use the tool: 'so you can name keys against real fields,' and clarifies that it reads the source 'live' once. It does not explicitly name alternatives or exclusion conditions, so it stops short of a full when/when-not statement.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
explain_holdExplain a held actionBInspect
Everything about a held action, for a person or their assistant to look at: what it waited on, what each source said, and a fix template a person can complete. Ogen never chooses. Free and pro.
| Name | Required | Description | Default |
|---|---|---|---|
| action_id | Yes | The action_id returned by commit_gated_action. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It adds some behavioral context with 'Ogen never chooses' and the read-only-sounding 'look at', but it does not explicitly state side effects, permissions, or behavior on invalid action_id. The 'explain' framing sufficiently implies a non-mutating tool, though not exhaustively.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is short and front-loaded with the tool's core value and contents. 'Ogen never chooses' and 'Free and pro' add a bit of behavioral/pricing context but are not verbose; overall it is appropriately sized.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple one-parameter tool with no output schema, the description adequately covers what the response will contain by listing the key output categories. It omits response envelope details, error cases, or authorization requirements, but given the low complexity this is a minor gap rather than a critical one.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the only parameter, action_id, is already well-described in the schema as the value returned by commit_gated_action. The tool description adds no additional parameter-level meaning, so the baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb and resource ('explain a held action') and enumerates the content delivered: what it waited on, source statements, and a fix template. It does not explicitly contrast with siblings like list_holds or what_it_caught, but the content list makes the tool's specific role evident.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'for a person or their assistant to look at' implies when the tool is appropriate, but there is no explicit when-not-to-use guidance or named alternatives. An agent cannot confidently decide between this and list_holds or what_it_caught from the description alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
export_evidenceExport your evidence fingerprintsBInspect
Return your stored read fingerprints (up to 1,000) for offline verification against your secret. Record.
| Name | Required | Description | Default |
|---|---|---|---|
| since | No | Optional ISO timestamp — only rows at/after this. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It discloses a retrieval behavior, a maximum result count, and the purpose. However, it is silent on whether the operation has side effects (e.g., does exporting mark or consume fingerprints?), on authentication or secret handling, and on what happens when more than 1,000 records exist. The trailing 'Record.' is cryptic and not explained.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The first sentence is well-front-loaded and packs essential behavior, limit, and purpose into one line. However, the second sentence is a single stray word, 'Record.', which adds no value and confuses the reader. This violates the principle that every sentence should earn its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is relatively simple with one optional parameter and no output schema. The description explains what is returned and the use case, but without an output schema more detail about the returned data's structure would help. The incomplete 'Record.' fragment also leaves a loose end, and the description does not explain how the 'secret' is supplied or used.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, and the sole parameter 'since' is fully documented in the input schema as an optional ISO timestamp with its filtering semantics. The description does not add any additional meaning to the parameter, so the baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Return') and a specific resource ('stored read fingerprints'), with a bound ('up to 1,000') and a purpose ('offline verification against your secret'). This makes the tool's function clear, but it does not explicitly differentiate it from sibling tools such as recall_live_fact or audit_log, so the agent must infer the distinction itself.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides a clear use context: 'for offline verification against your secret' tells the agent when this tool is relevant. However, it does not mention alternatives or exclusion conditions (e.g., 'use recall_live_facts for live queries'), so it stops short of full usage guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_holdsList held actionsAInspect
List this tenant's held actions, open or decided or both, newest first — up to 100 at a time. Holds that expired unanswered are left out unless you ask for them. Record.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max rows to return, default and cap 100. | |
| status | No | Only open (still waiting) or only decided holds. Omit for both. | |
| include | No | "expired" also lists holds that expired with nobody deciding. Omit for open and decided only. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the behavioral burden and does well by disclosing ordering (newest first), the 100-row cap, and the default exclusion of expired holds. It does not discuss response shape or pagination details, but "List" reasonably implies a read-only operation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and front-loaded with the primary operation and scope. The only blemish is the trailing "Record.," which is unclear and adds no useful meaning.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple, all-optional, three-parameter list operation, the description provides the defaults, filtering options, ordering, and row cap needed to invoke it correctly. There is no output schema, so the returned-row shape is not described, but that is a minor gap for a standard list operation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the schema already documents limit, status, and include. The description adds helpful context like "newest first" and "expired unanswered are left out unless you ask for them," but it does not substantially extend the parameter meaning beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: "List this tenant's held actions," and clearly scopes the operation with status options, ordering, and a row cap. It is immediately distinguishable from sibling tools like explain_hold or commit_gated_action because it is the bulk-listing operation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives clear context for when to call the tool—listing open, decided, or both held actions for the tenant—and explains the default omission of expired holds. It does not explicitly name alternatives or say when not to use it, so it stops short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
recall_live_factRecall a live factAInspect
Read the live value bound to a key, right now — every recall reads the live source at the moment of the question, nothing is cached as truth. Returns resolved with a value, ambiguous with every candidate and an instruction not to choose between them, or unavailable. Pass key for one fact, or keys for up to 25 in one call — each answered independently, so one unresolved key never changes another's answer. Free and pro.
| Name | Required | Description | Default |
|---|---|---|---|
| key | No | One bound key to recall, e.g. 'customer.acme.address'. Give key or keys, not both. | |
| keys | No | Instead of key: 1 to 25 bound keys, e.g. ['customer.acme.address', 'order.42.status']. Duplicates are read once. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Though no annotations are provided, the description is very transparent about behavior: it reads live source, returns specific states, and ensures independent resolution. It discloses that nothing is cached, which is a key behavioral trait. However, it doesn't mention potential errors beyond 'unavailable' or rate limits, but given the detail, it earns a 4. There is no contradiction with annotations since none are present.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, well-structured paragraph that front-loads the core purpose ('Read the live value bound to a key'), followed by behavioral details and usage examples. Every sentence adds meaningful information without redundancy. It's concise yet comprehensive, earning a 5.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's moderate complexity (two parameters, no output schema, no annotations), the description covers the essential aspects: what it does, return states, parameter usage, and limitations. It doesn't explain the return format in detail (e.g., JSON structure), but since no output schema exists, that might be expected. It could mention error scenarios, but it already covers 'unavailable' and independence, so it's largely complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema already provides descriptions for both parameters (key and keys), including examples and maxItems. The description adds value by explaining that one can pass either key or keys, not both, and that duplicates are read once, which goes beyond the schema. Since schema coverage is 100%, the baseline is 3, but the extra clarification on the mutual exclusivity and duplicate handling elevates it to 4.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action (read live value) and the resource (a key). It explicitly says 'every recall reads the live source at the moment of the question, nothing is cached as truth,' which is a distinctive behavioral trait that differentiates it from siblings like audit_log or what_it_caught. It also clarifies the return states (resolved, ambiguous, unavailable), which aids in correct invocation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context on when to use this tool (to read live facts) and how to use it (pass key or keys). It doesn't explicitly state when not to use it or mention alternatives like discover_fields, but the focus on 'live' and 'uncached' gives strong guidance. The mention of 'up to 25' keys and independence of answers is a usage guideline.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
register_actionRegister an actionAInspect
Tell Ogen which fact an action kind depends on, and how costly that action is to undo. Actions that are costly to undo wait for a person, so any cost other than "read" must name the approver who decides them — register that person with register_approver first. Record only. Each kind with a named approver is one scope; Record covers 5, and more can be added.
| Name | Required | Description | Default |
|---|---|---|---|
| key | Yes | The bound key this kind depends on. | |
| cost | Yes | How costly this kind of action is to undo. The costlier it is to undo, the more a person is involved before it happens. | |
| kind | Yes | The action kind commit_gated_action will be called with. | |
| approver | No | The name of the person who confirms a hold on this kind (see register_approver), or the reserved word "principal" — the kind then waits for whoever commit_gated_action's own ask names (principal: { email }), never a registered approver. Required for any cost other than "read", and for decide_with "passkey_only" (which a principal-gated kind can never use — a principal has no passkey). Omit to leave an already-registered approver unchanged; pass null to clear the approver, which only a "read" kind with decide_with "token_or_passkey" may do. | |
| decide_with | No | Which door may decide this kind's holds: the mailed one-time token or a passkey ("token_or_passkey", the default), or a passkey only ("passkey_only") — requires approver. Omit to leave an already-registered kind's setting unchanged. | |
| release_when | No | Release this kind without a person when its OWN bound fact — read live, the business's own record — resolves and satisfies exactly one rule: fact_equals (a string match) or fact_at_least (a number comparison against a named argument of the ask). Never both, never anything else. A fact that disagrees between systems, or can't be read, always waits for a person. Shares the same daily count as auto_release_under (one counter, not two). Applies to a caller's ask too — your own record deciding, not a limit you set. Only on a cost "expensive" kind; never with decide_with "passkey_only". Owner key only. Omit to leave unchanged; pass null to clear. | |
| hold_ttl_hours | No | How long a hold on this kind waits for a person, in whole hours (1-168, default 24). Omit to leave unchanged. A longer window is a longer time for the fact to move; a decision still goes by the fact as it stands when it runs. | |
| fallback_approver | No | A second registered approver (see register_approver) who is handed a hold on this kind once half its life has passed with no decision. The approver can still decide. Omit to leave unchanged; pass null to clear. | |
| auto_release_under | No | Release this kind without a person when its fact is settled and the arguments' amount is under a limit. A disagreement between systems still waits for a person, whatever the amount. Never with decide_with "passkey_only". Only on a cost "expensive" kind. At most auto_release_per_day releases of this kind in any 24 hours (default 20); past that, a person decides. The value is compared in your own unit (cents or dollars is yours) on that one field; the release ticket binds every argument. Owner key only. Omit to leave unchanged; pass null to clear. | |
| auto_release_per_day | No | How many times a day this kind may be released without a person: a count, 1-200, over any 24 hours (default 20). Past it, a person decides. Ogen keeps no amount; the most released in a day is your limit times this count. Only on a cost "expensive" kind. Owner key only. Omit to leave unchanged; pass null to go back to the default. | |
| hold_ttl_skip_weekends | No | Count only working days toward hold_ttl_hours — your weekend (Saturday-Sunday unless you set another with settings action "contact"), in your timezone. Refused until your timezone is set with settings action "contact". Default false. Omit to leave unchanged. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the behavioral burden and does so meaningfully: it explains that costly actions wait for a person, that a non-'read' cost requires a named approver, and that the approver must be registered first. It also discloses a scope limit ('Each kind with a named approver is one scope; Record covers 5'). It omits re-registration/update semantics and return behavior, but the core mental model is present.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four sentences, front-loaded with the core purpose and the key conditional rule about approvers. Little waste, though the final scope sentence ('Record covers 5, and more can be added') is jargon-heavy and less self-explanatory than the rest.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For an 11-parameter mutation tool with no annotations and no output schema, the description covers the essential registration model and the approver prerequisite, with the schema handling parameter detail. However, the cryptic scope/plan sentence leaves the 'Record covers 5' constraint unexplained, and there is no disclosure of what happens on re-registration or what the tool returns.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all 11 parameters in depth, including the cost/approver coupling and omit-to-leave-unchanged semantics. The description reinforces the cost-to-approver rule and the register_approver dependency, but adds no syntax or format detail beyond the schema. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb+resource ('Tell Ogen which fact an action kind depends on, and how costly that action is to undo'), which is clear about what registering an action kind means. It differentiates from the sibling register_approver by making it a prerequisite rather than an alternative. The trailing 'Record only' and scope-counting sentences are cryptic without further context, slightly muddying the purpose.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives one concrete prerequisite ordering: any cost other than 'read' must name an approver, and that person must be registered with register_approver first. However, it never states when to use register_action versus sibling tools like commit_gated_action or bind_source, nor any exclusions. Usage is implied rather than fully guided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
register_approverRegister an approverBInspect
Tell Ogen where to reach a person by name, so a held action can be sent to them. Record.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | The approver's name — must match a register_action approver value exactly. | |
| Yes | The approver's email address. | ||
| replace | No | Required (true) to repoint an existing name onto a DIFFERENT email — the old address is notified, and any passkeys set up under this name stop working. Omit when the email hasn't changed. | |
| revoke_passkeys | No | true to turn off every passkey this approver has set up (a lost device, a person leaving). They can set up a new one from their next emailed link. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Since no annotations are provided, the description carries the full burden. It reveals that registering an approver affects held actions and that using 'replace' notifies the old address and invalidates passkeys. It also discloses that setting revoke_passkeys has permanent effects. This is strong disclosure of side effects and consequences, going beyond the schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a bit verbose: 'Tell Ogen where to reach a person by name, so a held action can be sent to them. Record.' could be tightened. The critical side-effect information is embedded in the parameter descriptions rather than the main description, which is fine but not the most front-loaded structure. It's acceptable but not concise.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with 4 parameters, full schema coverage, and no output schema, the description adequately explains what happens: the purpose, the side effects of replace and revoke_passkeys, and the relationship to held actions. The main gap is lack of return value info, but since there's no output schema, the description could mention what is returned, but it's not critical for invocation. Overall, a solid definition.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the schema already describes all parameters. The description adds minimal extra meaning for parameters; it doesn't elaborate on the semantics beyond what the schema says. However, the description reinforces the critical behavior of 'replace' and 'revoke_passkeys' consistently. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states the verb 'register' and the resource 'approver,' and clarifies its purpose: to tell Ogen where to reach a person so a held action can be sent. However, it is somewhat verbose and could be more direct about the core action. It does not explicitly differentiate from sibling tools like register_action or set_contact, though the name itself helps.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies when to use this tool (when you need to record where to reach an approver) but does not explicitly state when not to use it or mention alternatives. The brief 'Record.' at the end is not helpful. Without explicit exclusions or alternative routing, an agent may struggle to choose between this and register_action or set_contact.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
report_outcomeReport an action's outcomeAInspect
Tell Ogen whether a confirmed action ran, with the release_ticket its confirmation issued. One report per ticket. Ogen records it; it never runs the action. Record.
| Name | Required | Description | Default |
|---|---|---|---|
| error | No | Why it did not run. Checked, never stored. | |
| ticket | Yes | The release_ticket a confirmation issued. | |
| outcome | Yes | Whether your system ran the action. | |
| reference | No | Your system's own id for what it did, e.g. a refund id: 1 to 120 letters, digits, or _ . : -. Never an address or a value. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
There are no annotations, so the description carries the behavioral burden. It discloses the two key behavioral traits: Ogen only records the report and never runs the action, and only one report per ticket is allowed. It does not describe duplicate handling or what response the caller receives, but the safety-relevant behavior is clearly exposed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the core purpose, followed by the one-per-ticket constraint and the key behavioral distinction. The final fragment 'Record.' is redundant filler, but the overall length is appropriate and no essential information is buried.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the moderate complexity, full parameter schema coverage, and no output schema, the description is largely complete: it explains what is being reported, the ticket requirement, the one-report-per-ticket limit, and that the tool does not execute anything. It could be slightly stronger by naming the preceding confirmation step or expected acknowledgement, but it is sufficient for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3. The description mostly restates the ticket provenance and the outcome concept already present in the schema, without adding format, relation, or conditional details. The schema remains the primary source for parameter meaning.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('report'), a specific resource ('a confirmed action's outcome'), and the identifying metadata ('with the release_ticket its confirmation issued'). It also distinguishes itself from execution tools by explicitly saying 'it never runs the action', so an agent can separate it from siblings like commit_gated_action or reverse_action.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives a clear context: after a confirmed action, tell Ogen whether the action ran, with one report per ticket. It also clarifies that this tool records rather than executes, but it does not explicitly name alternative tools or provide a when-not-to-use list, so it falls short of full explicit guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
reverseReverse an action, or restore a fixBInspect
action "reverse": mark an action as reversed, so what went wrong is not repeated — nothing else about your account changes. action "restore": put a correction that was set aside back into force. Named person required either way. Record.
| Name | Required | Description | Default |
|---|---|---|---|
| action | Yes | "reverse" or "restore". | |
| reason | No | action "reverse": optional note for the record. | |
| rule_id | No | action "restore" (required): the id of a correction that was set aside. | |
| action_id | No | action "reverse" (required): the action_id returned by commit_gated_action. | |
| restored_by | No | action "restore" (required): the named person recording this restore. | |
| reversed_by | No | action "reverse" (required): the named person recording this reversal. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of disclosing behavior. It states that 'reverse' only marks an action and does not alter anything else about the account, and it clarifies the effect of 'restore'. It also mentions that a named person is required. However, it does not reveal potential side effects, reversibility, permission needs, or what happens if the action is already reversed, nor does it clarify the ambiguous 'Record.' instruction. It provides some transparency but lacks thorough behavioral disclosure.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise—two sentences plus 'Record.'—and clearly separates the two action modes with labels. The main points are front-loaded, making it easy to scan. The trailing 'Record.' is cryptic and potentially unnecessary, but it does not overly detract from the overall clarity. It is well-structured and free of redundant wording, earning a 4.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool has six parameters with conditional requirements, and the description explains the two modes but does not explicitly mention which IDs are needed for each (relying on the schema). It does not describe return values or post-action effects, and there is no output schema. Given the schema covers parameters thoroughly, the description is adequate for basic usage but lacks completeness regarding implicit behavior and outcomes after the call.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 100% coverage for all six parameters, each already described with clear conditions (e.g., action_id required for 'reverse', rule_id for 'restore'). The description adds no new parameter meaning beyond what the schema provides. It does summarize the 'named person' requirement, but that is already encoded in the schema. Since schema coverage is complete, a baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly defines two distinct behaviors: 'reverse' marks an action as reversed to prevent repetition, and 'restore' puts a set-aside correction back into force. It uses specific verbs ('mark', 'put') and resources ('action', 'correction'), and emphasizes that nothing else changes. This precisely explains what the tool does and effectively distinguishes between its two modes, making it immediately clear to an agent.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives. It does not mention any sibling tools, nor does it state conditions like 'use this when you need to undo an action' or 'if you want to reverse a different entity, use another tool'. The only explicit requirement—'Named person required either way'—is a precondition, not a usage guideline. There is no exclusion or comparison to other options, leaving the agent to infer usage context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
settingsTenant settingsAInspect
Change one of this tenant's standing settings. action "mode": gate (the default) or observe — observe watches every read and action and counts what it would have caught without holding anything; switching to observe needs acknowledge: true and confirm: "nothing will be held", switching back to gate needs neither. action "contact": the email Ogen reaches you at (stored encrypted, never returned), your timezone and your weekend days. action "evidence": keep a keyed fingerprint of what each read saw, verifiable only with your secret. action "assist": an assistant on your own model-provider key that explains every hold and lists the questions only a person can answer — it never confirms, rejects, or picks. action "caller_set": register a counterparty's agent by label and grant it the action kinds it may request with commit_gated_action — a fresh or previously-removed label mints a key, shown once; re-registering a live label only updates the granted kinds. action "caller_remove": revoke a caller's key (the record stays). action "caller_list": every caller's label and granted kinds, never a key. A caller may only ever call commit_gated_action (for a granted kind) and explain_hold (for a hold it requested) — never decide, release, read a fact, bind a source or administer. action "door": a public page at /door/ naming your registered action kinds, for an agent that wants to know what it may ask before it asks it. Record.
| Name | Required | Description | Default |
|---|---|---|---|
| mode | No | action "mode" (required): 'gate' is the ordinary behaviour; 'observe' never holds anything, it only keeps count. | |
| slug | No | action "door": your public handle, e.g. 'acme-support' — 3 to 32 lowercase letters, digits and hyphens. Required the first time you turn the door on. | |
| No | action "contact": the address Ogen sends account notices to. | ||
| label | No | action "caller_set"/"caller_remove" (required): a name for the caller, e.g. "acme-procurement-agent". | |
| model | No | action "assist": model id to use. Default claude-opus-5. | |
| action | Yes | Which setting: "mode", "contact", "evidence", "assist", "door", "caller_set", "caller_remove" or "caller_list". | |
| public | No | action "door" (required): whether <pod>/door/<slug> is publicly reachable. | |
| secret | No | action "evidence": your own verification secret. Omit and Ogen generates one, returned once. | |
| confirm | No | action "mode": required (with acknowledge: true) only to switch to "observe" — exactly "nothing will be held". | |
| enabled | No | action "evidence" or "assist" (required): turn it on or off. Assist off clears the stored key and every open draft. | |
| weekend | No | action "contact": which days are your weekend — "sat-sun" (the default), "fri-sat", or "none". | |
| timezone | No | action "contact": your IANA timezone, e.g. "Europe/London". Unknown names are refused. | |
| daily_cap | No | action "assist": max drafts per UTC day (default 50, max 500). Past it, holds are still created, just without a draft. | |
| acknowledge | No | action "mode": required (with confirm) only to switch to "observe". | |
| provider_key | No | action "assist": your own Anthropic API key. Required to enable (Team tenants may omit it). Encrypted at rest, never returned. | |
| allowed_kinds | No | action "caller_set" (required): action kinds this caller may request — each must already be registered with register_action. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It discloses important behaviors: 'stored encrypted, never returned', 'shown once', the exact confirm phrase needed to switch to observe, that deleting/off ensures key clearing, and the caller's hard limits. That is strong transparency. It could go further on whether observations/evidence are retained, what a 'door' page exposes publicly, and whether disabling assist is reversible.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is one long dense block. It front-loads the overall purpose and then enumerates actions, which is good structure, but the sentences are very long and packed with clauses. There is little visual separation between action behaviors, making it harder to scan than necessary. The final 'Record.' is terse and slightly confusing. It's appropriately sized for the complexity, but the structure could be improved with clearer segmentation.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 16 parameters, 8 actions, no output schema, and no annotations, the description does a thorough job covering what each action does and key constraints. It leaves some gaps: what the caller_list output looks like, what the door page exposes, and whether mode/contact changes are reversible. But for a complex multi-action tool, this is close to complete for an agent to pick the right action and parameters.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The description adds action-specific semantics for several parameters that the schema alone doesn't emphasize: the exact confirm string for observe, the acknowledge+confirm pairing, the one-time key display, the constraint that allowed_kinds must be registered via register_action, and that a fresh label mints a key. Some parameters (model default, daily_cap default 50, weekend enum) are only in the schema, so it doesn't fully compensate, but it adds clear value.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Change one of this tenant's standing settings'), and enumerates the eight action values, each with a clear functional description (mode, contact, evidence, assist, caller_set, caller_remove, caller_list, door). It's a polymorphic settings tool with multiple sub-resources, so 5 would require clearer top-level framing that 'action' selects one of eight distinct settings. Still, the purpose is unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
For each action, the description explains the when/why: gate vs observe tradeoff, switching conditions, and what 'observe' watches. It also names constraints on callers (what a caller may only call). This goes well beyond siblings, routing the agent to the correct action and the correct constraints. The only gap is no explicit references to sibling tools like register_action or commit_gated_action by name for cross-tool flow, though commit_gated_action and explain_hold are mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
teach_fixTeach a fixBInspect
Record a person's correction, so nobody is asked the same thing twice. Named person required. Record.
| Name | Required | Description | Default |
|---|---|---|---|
| key | Yes | The bound key this fix applies to. | |
| raw | Yes | The raw value that was wrong. | |
| canonical | Yes | What it actually means. | |
| taught_by | Yes | The named person recording this fix. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full responsibility for disclosing behavioral traits. It indicates the action is a write (recording) and that it prevents future repeat questions, but it does not describe side effects, such as whether an existing fix for the same key is overwritten, whether the fix is immediately active, or any authorization/error conditions. The description is too sparse for a mutation tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is short and front-loaded with purpose, but it includes a redundant final 'Record.' that adds no information. Removing that tail would make it tight. The structure is acceptable but not optimal due to the unnecessary word.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 4 required parameters, no output schema, and no annotations, the description does not sufficiently cover operational context. It states the purpose and names a prerequisite, but omits behavior on duplicates, idempotency, or success/error outcomes. An agent calling this tool would need external knowledge about persistence and edge cases, which is a notable gap for a mutating tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 100% description coverage, so the schema already fully documents each parameter. The description adds only 'Named person required,' which merely reinforces the schema's existing note that taught_by is 'The named person recording this fix.' With full schema coverage, the baseline of 3 applies; extra meaning is not provided.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific action ('Record a person's correction') and the intended outcome ('so nobody is asked the same thing twice'), which clearly identifies the tool's purpose. It does not explicitly name or contrast sibling tools like restore_fix or what_it_caught, so it doesn't fully maximize distinguishability, but the core purpose is unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies a usage context (when a person provides a correction that should be persisted for future reference) and states a prerequisite ('Named person required'). However, it does not explicitly say when to use this tool instead of alternatives such as restore_fix or recall_live_facts, nor does it mention any exclusions. This is adequate but not explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
webhookHeld-action webhookBInspect
action "set": get an HTTP POST, signed so you can verify it came from Ogen, whenever an action is held or escalated (or, in observe mode, when it would have been). One URL per tenant. action "remove": stop sending them. Record.
| Name | Required | Description | Default |
|---|---|---|---|
| url | No | action "set" (required): https:// only — where Ogen POSTs the held-action event. | |
| action | Yes | "set" or "remove". | |
| secret | No | action "set": optional signing secret. Omit it and Ogen generates one, returned once in the result. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations present, the description carries the behavioral disclosure burden. It discloses that webhooks are HTTP POSTs, signed for verification, scoped to one URL per tenant, and that remove stops them. It does not mention permission requirements or response handling, but for a configuration tool these are the key behaviors and are covered.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise and front-loaded with the primary action 'set' and its behavior. However, the trailing 'Record.' is an unclear fragment that seems to add no value and could confuse an agent. The overall structure is otherwise efficient, but this stray word costs clarity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
While the schema covers parameters well, the description omits an explicit statement that 'set' requires a URL, which the schema implies but does not enforce (only action is required). The mystery 'Record.' suggests incomplete editing, and there is no information about the response or result of the operations. For a tool with no output schema, the description should clarify these gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema provides 100% description coverage for url, action, and secret, so the baseline is 3. The description adds the 'one URL per tenant' constraint and the signing detail, which are useful global context, but it does not add much parameter-specific meaning beyond the schema. The conditional requirement of url for set is mentioned in the schema, and the description doesn't reinforce it.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly communicates a webhook configuration tool with two actions: set and remove. It specifies the event trigger (held/escalated actions) and the signing behavior, making the tool's purpose evident. It doesn't explicitly contrast with siblings, but none of the listed tools serve a similar webhook function, so differentiation is not needed.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage context by explaining when webhooks fire (when an action is held or escalated), which tells an agent when to set one up. However, it offers no explicit guidance on when to choose this tool over alternatives, nor any exclusions or prerequisites. The instruction to use set vs. remove is clear, but broader decision guidance is absent.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
what_it_caughtWhat it caughtAInspect
A short report of what Ogen did for you over a window: what your agent asked, what it was able to act on, what waited for a person, and what a person decided. Nothing here runs on a timer — every number comes from calls already made. Free and pro.
| Name | Required | Description | Default |
|---|---|---|---|
| days | No | Window size in days, default 7. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden of behavioral disclosure. It proactively clarifies that the tool is not scheduled and that all numbers come from calls already made, preventing the agent from assuming it triggers work. It does not mention permissions or explicit read-only status, but for a report tool these are lesser gaps.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is short, front-loaded with the main purpose, and uses a clear colon list of report contents. The 'Free and pro' note adds little to tool invocation, but it is minor and does not make the description bloated.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple one-parameter report tool, the description is reasonably complete: it explains what the report contains and that it is not timer-based. The default window is left to the schema, and no output schema exists, but the core behavior is well covered.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema already documents the sole parameter 'days' with its range, default, and meaning, so schema description coverage is 100%. The description's 'over a window' only loosely refers to the parameter and adds no new semantic detail, so the baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly defines the tool as a short report of Ogen's activity over a window, listing the four report categories. It is specific about what the tool returns, but it does not use a verb and does not explicitly differentiate it from siblings like audit_log or recall_live_fact.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear context: this is a retrospective report, and it explicitly states 'nothing here runs on a timer — every number comes from calls already made.' This tells an agent when to use it, but it does not name alternatives or provide exclusion conditions, so it stops short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
2 tool updates
- Changed
commit_gated_action1 field changed- added
Input schema / properties / principalAdded value: +{ + "additionalProperties": false, + "description": "THE HOSTED REQUESTER: required when this kind was registered with approver \"principal\" — the hold then waits for the person named here, never a registered approver. Refused for any other kind. Nothing but the address.", + "properties": { + "email": { + "description": "The address of the person the agent is acting for.", + "format": "email", + "type": "string" + } + }, + "required": [ + "email" + ], + "type": "object" +}
- Changed
register_action2 fields changed- changed
Input schema / properties / approver / descriptionPrevious value: -"The name of the person who confirms a hold on this kind (see register_approver). Required for any cost other than \"read\", and for decide_with \"passkey_only\". Omit to leave an already-registered approver unchanged; pass null to clear the approver, which only a \"read\" kind with decide_with \"token_or_passkey\" may do."New value: +"The name of the person who confirms a hold on this kind (see register_approver), or the reserved word \"principal\" — the kind then waits for whoever commit_gated_action's own ask names (principal: { email }), never a registered approver. Required for any cost other than \"read\", and for decide_with \"passkey_only\" (which a principal-gated kind can never use — a principal has no passkey). Omit to leave an already-registered approver unchanged; pass null to clear the approver, which only a \"read\" kind with decide_with \"token_or_passkey\" may do." - added
Input schema / properties / release_whenAdded value: +{ + "anyOf": [ + { + "anyOf": [ + { + "additionalProperties": false, + "properties": { + "fact_equals": { + "description": "Release when this kind's own bound fact resolves and equals this string exactly.", + "type": "string" + } + }, + "required": [ + "fact_equals" + ], + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "fact_at_least": { + "description": "Release when this kind's own bound fact resolves to a number at least as large as this argument, e.g. \"quantity\".", + "type": "string" + } + }, + "required": [ + "fact_at_least" + ], + "type": "object" + } + ] + }, + { + "type": "null" + } + ], + "description": "Release this kind without a person when its OWN bound fact — read live, the business's own record — resolves and satisfies exactly one rule: fact_equals (a string match) or fact_at_least (a number comparison against a named argument of the ask). Never both, never anything else. A fact that disagrees between systems, or can't be read, always waits for a person. Shares the same daily count as auto_release_under (one counter, not two). Applies to a caller's ask too — your own record deciding, not a limit you set. Only on a cost \"expensive\" kind; never with decide_with \"passkey_only\". Owner key only. Omit to leave unchanged; pass null to clear." +}
2 tool updates
- Changed
bind_source1 field changed- added
Input schema / properties / alongsideAdded value: +{ + "description": "Bind a SECOND (or third, or fourth) live source to this key instead of replacing the one it already has. When the bound systems disagree, the act holds and whoever decides sees every reading, labelled by system. Omit this (the default) to replace the key's one source, removing any other source already bound alongside it.", + "type": "boolean" +}
- Changed
settings6 fields changed- changed
Input schema / properties / action / descriptionPrevious value: -"Which setting: \"mode\", \"contact\", \"evidence\" or \"assist\"."New value: +"Which setting: \"mode\", \"contact\", \"evidence\", \"assist\", \"door\", \"caller_set\", \"caller_remove\" or \"caller_list\"." - changed
Input schema / properties / action / enumPrevious value: -[ - "mode", - "contact", - "evidence", - "assist" -]New value: +[ + "mode", + "contact", + "evidence", + "assist", + "door", + "caller_set", + "caller_remove", + "caller_list" +] - added
Input schema / properties / allowed_kindsAdded value: +{ + "description": "action \"caller_set\" (required): action kinds this caller may request — each must already be registered with register_action.", + "items": { + "type": "string" + }, + "type": "array" +} - added
Input schema / properties / labelAdded value: +{ + "description": "action \"caller_set\"/\"caller_remove\" (required): a name for the caller, e.g. \"acme-procurement-agent\".", + "type": "string" +} - added
Input schema / properties / publicAdded value: +{ + "description": "action \"door\" (required): whether <pod>/door/<slug> is publicly reachable.", + "type": "boolean" +} - added
Input schema / properties / slugAdded value: +{ + "description": "action \"door\": your public handle, e.g. 'acme-support' — 3 to 32 lowercase letters, digits and hyphens. Required the first time you turn the door on.", + "type": "string" +}
2 tool updates
- Changed
bind_source1 field changed- changed
Input schema / properties / headers / descriptionPrevious value: -"For a plain JSON endpoint only: optional request headers (e.g. an auth token). Stored encrypted at rest."New value: +"For a plain JSON endpoint only: optional request headers (e.g. an auth token), up to 16. Stored encrypted at rest."
- Changed
webhook1 field changed- changed
Input schema / properties / secret / descriptionPrevious value: -"action \"set\": optional signing secret. Omit to sign with your tenant id instead."New value: +"action \"set\": optional signing secret. Omit it and Ogen generates one, returned once in the result."
19 tool updates
- Changed
bind_source1 field changed- changed
Input schema / properties / source / descriptionPrevious value: -"Instead of a plain endpoint: a Postgres/Supabase table (postgrest), an Airtable table, a Google Sheet, a HubSpot object, a tool on another MCP server (mcp), a Salesforce SOQL query (salesforce), a NetSuite SuiteQL query (netsuite), a one-row SELECT against a raw Postgres database (postgres) — direct SQL, read-only — or a Priority ERP OData read (priority): base_url, username/password (or Priority's own application credentials, sent the same way), form, filter, field. Fields depend on kind. For salesforce/netsuite/hubspot/airtable/postgrest/postgres/priority, pass connection: \"<name>\" (see set_connection) instead of that kind's own credential fields."New value: +"Instead of a plain endpoint: a Postgres/Supabase table (postgrest), an Airtable table, a Google Sheet, a HubSpot object, a tool on another MCP server (mcp), a Salesforce SOQL query (salesforce), a NetSuite SuiteQL query (netsuite), a one-row SELECT against a raw Postgres database (postgres) — direct SQL, read-only — or a Priority ERP OData read (priority): base_url, username/password (or Priority's own application credentials, sent the same way), form, filter, field. Fields depend on kind. For salesforce/netsuite/hubspot/airtable/postgrest/postgres/priority, pass connection: \"<name>\" (see connections action \"set\") instead of that kind's own credential fields."
- Added
connections - Removed
list_connections - Changed
recall_live_fact3 fields changed- changed
Input schema / properties / key / descriptionPrevious value: -"The bound key to recall, e.g. 'customer.acme.address'."New value: +"One bound key to recall, e.g. 'customer.acme.address'. Give key or keys, not both." - added
Input schema / properties / keysAdded value: +{ + "description": "Instead of key: 1 to 25 bound keys, e.g. ['customer.acme.address', 'order.42.status']. Duplicates are read once.", + "items": { + "type": "string" + }, + "maxItems": 25, + "minItems": 1, + "type": "array" +} - removed
Input schema / requiredRemoved value: -[ - "key" -]
- Removed
recall_live_facts - Changed
register_action1 field changed- changed
Input schema / properties / hold_ttl_skip_weekends / descriptionPrevious value: -"Count only working days toward hold_ttl_hours — your weekend (Saturday-Sunday unless you set another with set_contact), in your timezone. Refused until your timezone is set with set_contact. Default false. Omit to leave unchanged."New value: +"Count only working days toward hold_ttl_hours — your weekend (Saturday-Sunday unless you set another with settings action \"contact\"), in your timezone. Refused until your timezone is set with settings action \"contact\". Default false. Omit to leave unchanged."
- Removed
register_webhook - Removed
remove_connection - Removed
remove_webhook - Removed
restore_fix - Added
reverse - Removed
reverse_action - Removed
set_assist - Removed
set_connection - Removed
set_contact - Removed
set_evidence - Removed
set_mode - Added
settings - Added
webhook
2 tool updates
- Changed
bind_source1 field changed- added
Input schema / properties / fieldAdded value: +{ + "description": "For a plain JSON endpoint only: an optional dotted path to one value in the response, e.g. \"status\" or \"data.items.0.total\" (object keys or array indexes, up to 16 segments). Recall then answers with just that value. A missing path, a body that isn't JSON, or a null there comes back unavailable with reason field_missing, not_json or field_null, and a detail naming the missing segment. Omit it to get the whole body.", + "type": "string" +}
- Changed
discover_fields1 field changed- added
Input schema / properties / fieldAdded value: +{ + "description": "For a plain JSON endpoint: a dotted path to look under, e.g. \"data\" — lists the fields at that path instead of the whole body. Defaults to the field the key was bound with, if any.", + "type": "string" +}
1 tool update
- Changed
register_action2 fields changed- added
Input schema / properties / auto_release_per_dayAdded value: +{ + "anyOf": [ + { + "maximum": 200, + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } + ], + "description": "How many times a day this kind may be released without a person: a count, 1-200, over any 24 hours (default 20). Past it, a person decides. Ogen keeps no amount; the most released in a day is your limit times this count. Only on a cost \"expensive\" kind. Owner key only. Omit to leave unchanged; pass null to go back to the default." +} - added
Input schema / properties / auto_release_underAdded value: +{ + "anyOf": [ + { + "additionalProperties": false, + "properties": { + "currency": { + "description": "Optional: a three-letter code. The arguments' \"currency\" must match it.", + "type": "string" + }, + "field": { + "description": "The argument that carries the amount, e.g. \"amount\".", + "type": "string" + }, + "value": { + "description": "Release without a person only when that argument is a number strictly under this.", + "type": "number" + } + }, + "required": [ + "field", + "value" + ], + "type": "object" + }, + { + "type": "null" + } + ], + "description": "Release this kind without a person when its fact is settled and the arguments' amount is under a limit. A disagreement between systems still waits for a person, whatever the amount. Never with decide_with \"passkey_only\". Only on a cost \"expensive\" kind. At most auto_release_per_day releases of this kind in any 24 hours (default 20); past that, a person decides. The value is compared in your own unit (cents or dollars is yours) on that one field; the release ticket binds every argument. Owner key only. Omit to leave unchanged; pass null to clear." +}
2 tool updates
- Changed
commit_gated_action1 field changed- added
Input schema / properties / argsAdded value: +{ + "additionalProperties": {}, + "description": "Optional: the arguments you will run the action with. Ogen keeps only their fingerprint, for the release ticket a confirmation issues.", + "type": "object" +}
- Added
report_outcome
3 tool updates
- Changed
list_holds1 field changed- added
Input schema / properties / includeAdded value: +{ + "description": "\"expired\" also lists holds that expired with nobody deciding. Omit for open and decided only.", + "enum": [ + "expired" + ], + "type": "string" +}
- Changed
register_action3 fields changed- added
Input schema / properties / fallback_approverAdded value: +{ + "description": "A second registered approver (see register_approver) who is handed a hold on this kind once half its life has passed with no decision. The approver can still decide. Omit to leave unchanged; pass null to clear.", + "type": [ + "string", + "null" + ] +} - added
Input schema / properties / hold_ttl_hoursAdded value: +{ + "description": "How long a hold on this kind waits for a person, in whole hours (1-168, default 24). Omit to leave unchanged. A longer window is a longer time for the fact to move; a decision still goes by the fact as it stands when it runs.", + "maximum": 168, + "minimum": 1, + "type": "integer" +} - added
Input schema / properties / hold_ttl_skip_weekendsAdded value: +{ + "description": "Count only working days toward hold_ttl_hours — your weekend (Saturday-Sunday unless you set another with set_contact), in your timezone. Refused until your timezone is set with set_contact. Default false. Omit to leave unchanged.", + "type": "boolean" +}
- Changed
set_contact4 fields changed- changed
Input schema / properties / email / descriptionPrevious value: -"The address Ogen sends trial-progress nudges to."New value: +"The address Ogen sends account notices to." - added
Input schema / properties / timezoneAdded value: +{ + "description": "Your IANA timezone, e.g. \"Europe/London\". Unknown names are refused.", + "type": "string" +} - added
Input schema / properties / weekendAdded value: +{ + "description": "Which days are your weekend: \"sat-sun\" (the default), \"fri-sat\", or \"none\" (every day counts).", + "enum": [ + "sat-sun", + "fri-sat", + "none" + ], + "type": "string" +} - removed
Input schema / requiredRemoved value: -[ - "email" -]
3 tool updates
- Changed
list_holds1 field changed- removed
Input schema / properties / includeRemoved value: -{ - "description": "\"expired\" also lists holds that expired with nobody deciding. Omit for open and decided only.", - "enum": [ - "expired" - ], - "type": "string" -}
- Changed
register_action3 fields changed- removed
Input schema / properties / fallback_approverRemoved value: -{ - "description": "A second registered approver (see register_approver) who is handed a hold on this kind once half its life has passed with no decision. The approver can still decide. Omit to leave unchanged; pass null to clear.", - "type": [ - "string", - "null" - ] -} - removed
Input schema / properties / hold_ttl_hoursRemoved value: -{ - "description": "How long a hold on this kind waits for a person, in whole hours (1-168, default 24). Omit to leave unchanged. A longer window is a longer time for the fact to move; a decision still goes by the fact as it stands when it runs.", - "maximum": 168, - "minimum": 1, - "type": "integer" -} - removed
Input schema / properties / hold_ttl_skip_weekendsRemoved value: -{ - "description": "Count only Monday-Friday time, in your timezone (set_contact), toward hold_ttl_hours. Default false. Omit to leave unchanged.", - "type": "boolean" -}
- Changed
set_contact3 fields changed- changed
Input schema / properties / email / descriptionPrevious value: -"The address Ogen sends account notices to."New value: +"The address Ogen sends trial-progress nudges to." - removed
Input schema / properties / timezoneRemoved value: -{ - "description": "Your IANA timezone, e.g. \"Europe/London\". Unknown names are refused.", - "type": "string" -} - added
Input schema / requiredAdded value: +[ + "email" +]
3 tool updates
- Changed
list_holds1 field changed- added
Input schema / properties / includeAdded value: +{ + "description": "\"expired\" also lists holds that expired with nobody deciding. Omit for open and decided only.", + "enum": [ + "expired" + ], + "type": "string" +}
- Changed
register_action3 fields changed- added
Input schema / properties / fallback_approverAdded value: +{ + "description": "A second registered approver (see register_approver) who is handed a hold on this kind once half its life has passed with no decision. The approver can still decide. Omit to leave unchanged; pass null to clear.", + "type": [ + "string", + "null" + ] +} - added
Input schema / properties / hold_ttl_hoursAdded value: +{ + "description": "How long a hold on this kind waits for a person, in whole hours (1-168, default 24). Omit to leave unchanged. A longer window is a longer time for the fact to move; a decision still goes by the fact as it stands when it runs.", + "maximum": 168, + "minimum": 1, + "type": "integer" +} - added
Input schema / properties / hold_ttl_skip_weekendsAdded value: +{ + "description": "Count only Monday-Friday time, in your timezone (set_contact), toward hold_ttl_hours. Default false. Omit to leave unchanged.", + "type": "boolean" +}
- Changed
set_contact3 fields changed- changed
Input schema / properties / email / descriptionPrevious value: -"The address Ogen sends trial-progress nudges to."New value: +"The address Ogen sends account notices to." - added
Input schema / properties / timezoneAdded value: +{ + "description": "Your IANA timezone, e.g. \"Europe/London\". Unknown names are refused.", + "type": "string" +} - removed
Input schema / requiredRemoved value: -[ - "email" -]
1 tool update
- Changed
register_action2 fields changed- changed
Input schema / properties / approver / descriptionPrevious value: -"The name of the person who confirms a hold on this kind (see register_approver). Required for any cost other than \"read\". Omit to leave an already-registered approver unchanged; pass null to clear the approver, which only a \"read\" kind may do."New value: +"The name of the person who confirms a hold on this kind (see register_approver). Required for any cost other than \"read\", and for decide_with \"passkey_only\". Omit to leave an already-registered approver unchanged; pass null to clear the approver, which only a \"read\" kind with decide_with \"token_or_passkey\" may do." - added
Input schema / properties / decide_withAdded value: +{ + "description": "Which door may decide this kind's holds: the mailed one-time token or a passkey (\"token_or_passkey\", the default), or a passkey only (\"passkey_only\") — requires approver. Omit to leave an already-registered kind's setting unchanged.", + "enum": [ + "token_or_passkey", + "passkey_only" + ], + "type": "string" +}
1 tool update
- Changed
register_approver2 fields changed- changed
Input schema / properties / replace / descriptionPrevious value: -"Required (true) to repoint an existing name onto a DIFFERENT email — the old address is notified. Omit when the email hasn't changed."New value: +"Required (true) to repoint an existing name onto a DIFFERENT email — the old address is notified, and any passkeys set up under this name stop working. Omit when the email hasn't changed." - added
Input schema / properties / revoke_passkeysAdded value: +{ + "description": "true to turn off every passkey this approver has set up (a lost device, a person leaving). They can set up a new one from their next emailed link.", + "type": "boolean" +}
1 tool update
- Added
certify_packet
24 tool updates
- First observed
audit_log - First observed
bind_source - First observed
commit_gated_action - First observed
discover_fields - First observed
explain_hold - First observed
export_evidence - First observed
list_connections - First observed
list_holds - First observed
recall_live_fact - First observed
recall_live_facts - First observed
register_action - First observed
register_approver - First observed
register_webhook - First observed
remove_connection - First observed
remove_webhook - First observed
restore_fix - First observed
reverse_action - First observed
set_assist - First observed
set_connection - First observed
set_contact - First observed
set_evidence - First observed
set_mode - First observed
teach_fix - First observed
what_it_caught
Publisher details
- Operator
- Ogen · Publisher source
- Operator website
- https://ogenhq.com · Publisher source
- Vendor relationship
- First-party · Publisher source
- Documentation
- https://ogenhq.com/docs · Publisher source
- Trust center
- https://ogenhq.com/hardening.html · Publisher source
- Restrictions
- An API key is required. A free tier is available; Pro covers gated actions and the Pro-only tools. Two regions: us.ogenhq.com and eu.ogenhq.com, each with its own keys and data. · Publisher source
Related MCP Connectors
Eight metered machine-intelligence tools for AI agents with native x402 payment paths.
9 utility tools for agents: DNS, WHOIS, email, IP, URL, headers, QR, text, tech. x402 on Base.
Rental property tools for agents: turnover cost estimates and security deposit rules by US state.
51Find tools ranked by measured behaviour, read agent reviews, and talk to other people's agents.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceMonetizable AI agent tools - document parsing, text analysis, code generation, security scanning, format conversion, and more. 8 tools with HTTP API and MCP protocol support.MIT
- AlicenseNot gradedqualityDmaintenanceA set of nine tools for AI agents with micropayments in USDC on Base, including on-chain intelligence, web search, document parsing, and more.16 npmMIT
- AlicenseAqualityCmaintenance9 tools, Lightning-gated. Pay per call. For agents that need verifiable signed actions with an audit trail. Nostr event signing via daemon Publish events to relays Create Lightning invoices Action receipts — signed proof of agent actions Identity attestation910 npmMIT
- AlicenseAqualityCmaintenanceLicensed, rights-cleared content for AI agents, 17 tools to discover, license, retrieve, and verify expert content with on-chain proof and EU AI Act Article 53 support.8258 npm1MIT
Glama MCP Gateway
Add one secure layer between your agents and this server.