Skip to main content
Glama

runtime_secrets

Destructive

Secrets such as API keys: sandboxes see a placeholder, and the egress proxy adds the value on HTTPS to the hosts you name. exposed: true gives named machines the value itself. set(name, value, hosts?, header?, format?, rules?, only?, githubApp?, git?, api?, env?, exposed?, expectedVersion?): Store or replace one. Sandboxes see a placeholder in the environment variable of this name; the egress proxy swaps in the value in a credential header (Authorization, x-api-key and the like) of HTTPS requests to hosts, or sets header on each; never in the URL or another header. rules (an account with credit) limit it by method and path. exposed: true gives the machines only names by id the value itself. The value is never returned. list(after?, limit?): Names, kind (exposed), version, hosts, header and placeholder; never values. By name, limit at a time (default 50); pass the answer's next as after for the next page. get(name): One by name, as list shows it; never its value. delete(name): Erase one by name; its placeholder stops being replaced. It does not revoke the key at its provider. jobs_ actions: the copy a scheduled job puts in its run's environment. jobs_list(after?, limit?), jobs_get(id), jobs_put(name, value), jobs_rotate(id, value, expectedVersion), jobs_delete(id, expectedVersion), jobs_share(id, agents), jobs_reveal(id, version?). Bind one with runtime_jobs create input.secrets: [{name: ENV_NAME, secretId}]. It belongs to the person whose key stored it and is versioned; a deleted name cannot be reused. Only the key that stored it, the agents it names and its person may list, bind, reveal, rotate or delete it; share(id, agents) replaces the agents named (only its person or the key that stored it). delete stops future use, not the provider's token; reveal shows a value and needs its own permission, so prefer binding.

Input Schema

NameRequiredDescriptionDefault
idNo
apiNoOptional. Each sandbox's hour with the secret, the far end's reserve, GraphQL's mutations and shared copies.
envNoOptional. The variable the placeholder (or the real value) is in, when not the secret's name. Secrets whose scopes (only) share no sandbox may share one, such as one GITHUB_TOKEN per repository; two in one sandbox is 409. The secret's own name gives the name back; absent on a replacement, the variable stays.
gitNoOptional. What a git push over HTTPS carrying the secret may update. A push to any other ref, a tag, or a delete is refused before it leaves the server, in git's own words (! [remote rejected]). The API is held to the same: with git, the secret makes an API write only when its rules name it (none without rules) and a GraphQL mutation only when api.graphql lists it; even then it makes no REST call that writes a file, merges, makes or deletes a ref, renames or protects a branch, or makes a release, moves by PATCH only a branch its patterns allow, and makes no GraphQL mutation that does any of these (createCommitOnBranch, updateRef, mergePullRequest and the like). With githubApp, git needs githubApp.permissions, without admin, administration or secrets, and workflows, actions and environments at most read.
nameNoThe secret's name, unique in the organization, and the environment variable its placeholder is in unless env names another. Upper case letters, digits and underscores.
onlyNoOptional. Which sandboxes get the secret: those matching labels, those named in sandboxes, and every copy of the Apps in apps; any other sees no placeholder and never sends the value. {} is every sandbox. Absent: a replacement keeps its scope, a new secret goes to every sandbox. A real value (exposed) needs sandboxes or apps, no labels.
afterNoThe next of the previous page: the secrets named after it.
hostsNoWhere the value may go: the proxy puts it only into HTTPS requests to these hosts. Required unless exposed.
limitNoPage size, 1 to 100.
rulesNoOptional, for an account with credit. The value goes only into requests a rule allows, by method and path. A request whose path could be read two ways (an encoded slash, a semicolon, a backslash) gets no secret that has rules. Absent: every request to the hosts. Replacing a secret without rules clears them.
valueNoThe secret. Visible ASCII and spaces, at most 8 KiB; with githubApp, the App's PEM private key; with exposed, any text up to 64 KiB, several lines too. Stored sealed and never returned.
actionYes
agentsNoshare: the principalId of each agent (GET /v1/me) that may use it besides the key that stored it; [] leaves only that key.
formatNoOptional, with header. The header's value, with {value} where the secret goes. Default "{value}".
headerNoOptional. Set this header on every request to the hosts, replacing the sandbox's, so code needs no placeholder; the value goes into it and nowhere else. Without it, the placeholder is replaced only in a credential header: Authorization, x-api-key, x-goog-api-key, api-key, xi-api-key, x-subscription-token, private-token.
exposedNoOptional. true: the machines only names by id get the value itself, no hosts. The key needs exec in each; give it on every write.
versionNo
githubAppNoOptional. The value is this GitHub App's private key (PEM), and the servers make its installation tokens themselves, each for an hour: the key goes into no request, and each request the rules allow carries the current token, as Authorization: Bearer to the API and as git's x-access-token to git over HTTPS. Takes no header or format.
idempotencyKeyNoOptional: left out, one is made and returned as idempotencyKey. Send it back only to retry this exact call after a temporary error.
expectedVersionNoOptional. Write only over this version (0: a new one); else 409.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed10 schema fields changed
    • changedInput schema / properties / action / enum
      Previous value: -[
      -  "set",
      -  "list",
      -  "delete",
      -  "jobs_list",
      -  "jobs_get",
      -  "jobs_put",
      -  "jobs_rotate",
      -  "jobs_delete",
      -  "jobs_share",
      -  "jobs_reveal"
      -]New value: +[
      +  "set",
      +  "list",
      +  "get",
      +  "delete",
      +  "jobs_list",
      +  "jobs_get",
      +  "jobs_put",
      +  "jobs_rotate",
      +  "jobs_delete",
      +  "jobs_share",
      +  "jobs_reveal"
      +]
    • changedInput schema / properties / env / description
      Previous value: -"Optional. The environment variable the placeholder is in, when not the secret's name. Several secrets may share one, each scoped (only) to sandboxes no other of them reaches, such as one GITHUB_TOKEN per repository; a write that would put two in one sandbox is refused (409). The secret's own name gives the name back. Absent when replacing a secret: the variable it has stays."New value: +"Optional. The variable the placeholder (or the real value) is in, when not the secret's name. Secrets whose scopes (only) share no sandbox may share one, such as one GITHUB_TOKEN per repository; two in one sandbox is 409. The secret's own name gives the name back; absent on a replacement, the variable stays."
    • addedInput schema / properties / expectedVersion / description
      Added value: +"Optional. Write only over this version (0: a new one); else 409."
    • changedInput schema / properties / expectedVersion / minimum
      Previous value: -1New value: +0
    • addedInput schema / properties / exposed
      Added value: +{
      +  "description": "Optional. true: the machines only names by id get the value itself, no hosts. The key needs exec in each; give it on every write.",
      +  "type": "boolean"
      +}
    • changedInput schema / properties / header / description
      Previous value: -"Optional. Set this header on every request to the hosts, replacing one the sandbox sent, so code needs no placeholder at all; the value then goes into this header and nowhere else. Without it, the placeholder is replaced only in a credential header: Authorization, x-api-key, x-goog-api-key, api-key, xi-api-key, x-subscription-token, private-token."New value: +"Optional. Set this header on every request to the hosts, replacing the sandbox's, so code needs no placeholder; the value goes into it and nowhere else. Without it, the placeholder is replaced only in a credential header: Authorization, x-api-key, x-goog-api-key, api-key, xi-api-key, x-subscription-token, private-token."
    • changedInput schema / properties / hosts / description
      Previous value: -"Where the value may go. The proxy puts it only into HTTPS requests to these hosts."New value: +"Where the value may go: the proxy puts it only into HTTPS requests to these hosts. Required unless exposed."
    • changedInput schema / properties / only / description
      Previous value: -"Optional. Which sandboxes get the secret: those matching labels, those named in sandboxes, and every copy of the Apps named in apps. Any other sandbox of the organization sees no placeholder and its requests never carry the value. {} gives it back to every sandbox. Absent when replacing a secret: the scope it has stays, so a new value never widens who gets it. Absent on a new secret: every sandbox, as before."New value: +"Optional. Which sandboxes get the secret: those matching labels, those named in sandboxes, and every copy of the Apps in apps; any other sees no placeholder and never sends the value. {} is every sandbox. Absent: a replacement keeps its scope, a new secret goes to every sandbox. A real value (exposed) needs sandboxes or apps, no labels."
    • changedInput schema / properties / only / properties / apps / description
      Previous value: -"Every copy of these Apps or Functions (their ids) gets the secret, whatever its version: copies made by later deploys, restarts and scaling too. A deploy names the secrets its copies see as environment variables (secrets on POST /v1/apps/{id}/deploys)."New value: +"Every copy of these Apps or Functions (their ids), whatever its version, later ones too. A deploy names the secrets its copies see (secrets on POST /v1/apps/{id}/deploys)."
    • changedInput schema / properties / value / description
      Previous value: -"The secret. Visible ASCII and spaces, at most 8 KiB; with githubApp, the App's PEM private key. Stored sealed and never returned."New value: +"The secret. Visible ASCII and spaces, at most 8 KiB; with githubApp, the App's PEM private key; with exposed, any text up to 64 KiB, several lines too. Stored sealed and never returned."
  2. Changed3 schema fields changed
    • addedInput schema / properties / after / description
      Added value: +"The next of the previous page: the secrets named after it."
    • addedInput schema / properties / limit / default
      Added value: +50
    • addedInput schema / properties / limit / description
      Added value: +"Page size, 1 to 100."
  3. Changed7 schema fields changed
    • addedInput schema / properties / api
      Added value: +{
      +  "additionalProperties": false,
      +  "description": "Optional. Each sandbox's hour with the secret, the far end's reserve, GraphQL's mutations and shared copies.",
      +  "properties": {
      +    "callsPerHour": {
      +      "description": "Optional. The most requests each sandbox makes with the secret in an hour; past it, 429 with Retry-After.",
      +      "maximum": 1000000,
      +      "minimum": 1,
      +      "type": "integer"
      +    },
      +    "copies": {
      +      "description": "Optional. Reads (GET over HTTP/2) answered from the server's copy while the far end answers 304 to its ETag, shared by every sandbox the secret reaches on that server; past a sandbox's hour, from the copy unasked. Answers carry x-runtime-copy.",
      +      "type": "boolean"
      +    },
      +    "fresh": {
      +      "description": "Optional, with copies. Seconds a copy is answered without asking the far end, a GraphQL query's included (GraphQL has no ETag): a read within them may be that much older.",
      +      "maximum": 300,
      +      "minimum": 1,
      +      "type": "integer"
      +    },
      +    "graphql": {
      +      "additionalProperties": false,
      +      "description": "Optional. A GraphQL query always goes; a mutation only when every one is listed.",
      +      "properties": {
      +        "mutations": {
      +          "description": "The mutations a request may make; any other is refused with 403.",
      +          "items": {
      +            "type": "string"
      +          },
      +          "type": "array"
      +        },
      +        "path": {
      +          "description": "Optional. Default /graphql.",
      +          "type": "string"
      +        }
      +      },
      +      "required": [
      +        "mutations"
      +      ],
      +      "type": "object"
      +    },
      +    "keep": {
      +      "description": "Optional. Calls the far end keeps for others: none is sent while its x-ratelimit-remaining says this many or fewer are left, until its reset.",
      +      "maximum": 1000000,
      +      "minimum": 0,
      +      "type": "integer"
      +    },
      +    "writesPerHour": {
      +      "description": "Optional. The most writes (any method but GET, HEAD and OPTIONS; a GraphQL mutation) each sandbox makes in an hour. 0: none.",
      +      "maximum": 1000000,
      +      "minimum": 0,
      +      "type": "integer"
      +    }
      +  },
      +  "type": "object"
      +}
    • addedInput schema / properties / env
      Added value: +{
      +  "description": "Optional. The environment variable the placeholder is in, when not the secret's name. Several secrets may share one, each scoped (only) to sandboxes no other of them reaches, such as one GITHUB_TOKEN per repository; a write that would put two in one sandbox is refused (409). The secret's own name gives the name back. Absent when replacing a secret: the variable it has stays.",
      +  "type": "string"
      +}
    • addedInput schema / properties / git
      Added value: +{
      +  "additionalProperties": false,
      +  "description": "Optional. What a git push over HTTPS carrying the secret may update. A push to any other ref, a tag, or a delete is refused before it leaves the server, in git's own words (! [remote rejected]). The API is held to the same: with git, the secret makes an API write only when its rules name it (none without rules) and a GraphQL mutation only when api.graphql lists it; even then it makes no REST call that writes a file, merges, makes or deletes a ref, renames or protects a branch, or makes a release, moves by PATCH only a branch its patterns allow, and makes no GraphQL mutation that does any of these (createCommitOnBranch, updateRef, mergePullRequest and the like). With githubApp, git needs githubApp.permissions, without admin, administration or secrets, and workflows, actions and environments at most read.",
      +  "properties": {
      +    "push": {
      +      "description": "The branches a push may update: refs/heads/ then a name, with * only at the end for any name that begins so, and {label.<key>} for the sandbox's own label of that key, right below a fixed first segment (refs/heads/task/{label.task}), then /, -- or the end; a first segment takes one label key across the organization's secrets. A value names the branch of the first sandbox made with it, deleted or not, and a sandbox's value of such a label can't change once it is made. A sandbox pushes nothing a label names when it lacks the label, when its value holds /, *, -- or ends in -, when an earlier sandbox had it, or when a compartment's key made it. Empty: no push at all.",
      +      "items": {
      +        "type": "string"
      +      },
      +      "type": "array"
      +    }
      +  },
      +  "required": [
      +    "push"
      +  ],
      +  "type": "object"
      +}
    • addedInput schema / properties / githubApp
      Added value: +{
      +  "additionalProperties": false,
      +  "description": "Optional. The value is this GitHub App's private key (PEM), and the servers make its installation tokens themselves, each for an hour: the key goes into no request, and each request the rules allow carries the current token, as Authorization: Bearer to the API and as git's x-access-token to git over HTTPS. Takes no header or format.",
      +  "properties": {
      +    "api": {
      +      "description": "Optional. The App's API on GitHub Enterprise Server: https://<host>/api/v3, a public name that is one of hosts. Default https://api.github.com. Its tokens are asked for only at an address a sandbox could reach.",
      +      "type": "string"
      +    },
      +    "id": {
      +      "description": "The App's id.",
      +      "maximum": 9007199254740991,
      +      "minimum": 1,
      +      "type": "integer"
      +    },
      +    "installation": {
      +      "description": "The installation's id: where the App is installed.",
      +      "maximum": 9007199254740991,
      +      "minimum": 1,
      +      "type": "integer"
      +    },
      +    "permissions": {
      +      "additionalProperties": {
      +        "enum": [
      +          "read",
      +          "write",
      +          "admin"
      +        ],
      +        "type": "string"
      +      },
      +      "description": "Optional. What each token may do, at most what the App holds; all the App's permissions when absent.",
      +      "minProperties": 1,
      +      "type": "object"
      +    },
      +    "repositories": {
      +      "description": "Optional. The repositories each token reaches, by name; every repository of the installation when absent.",
      +      "items": {
      +        "type": "string"
      +      },
      +      "type": "array"
      +    }
      +  },
      +  "required": [
      +    "id",
      +    "installation"
      +  ],
      +  "type": "object"
      +}
    • changedInput schema / properties / name / description
      Previous value: -"The environment variable the placeholder is in, inside every sandbox of the organization. Upper case letters, digits and underscores."New value: +"The secret's name, unique in the organization, and the environment variable its placeholder is in unless env names another. Upper case letters, digits and underscores."
    • changedInput schema / properties / rules / items / properties / paths / description
      Previous value: -"Exact paths, or prefixes ending in /* for every path under them. Written canonically: starting with /, no . or .. segments, no ; or \\, no encoded slash. An escaped character other than a letter, digit, -, ., _ or ~ matches only the same escape: a client that sends %3A needs a rule with %3A, not :."New value: +"Exact paths, or prefixes ending in /* for every path under them; a segment that is * alone names any one segment (/repos/acme/app/pulls/*/comments). Written canonically: starting with /, no . or .. segments, no ; or \\, no encoded slash. An escaped character other than a letter, digit, -, ., _ or ~ matches only the same escape: a client that sends %3A needs a rule with %3A, not :."
    • changedInput schema / properties / value / description
      Previous value: -"The secret. Visible ASCII and spaces, at most 8 KiB. Stored sealed and never returned."New value: +"The secret. Visible ASCII and spaces, at most 8 KiB; with githubApp, the App's PEM private key. Stored sealed and never returned."
  4. Changed2 schema fields changed
    • changedInput schema / properties / only / description
      Previous value: -"Optional. Which sandboxes get the secret: those matching labels, and those named in sandboxes. Any other sandbox of the organization sees no placeholder and its requests never carry the value. {} gives it back to every sandbox. Absent when replacing a secret: the scope it has stays, so a new value never widens who gets it. Absent on a new secret: every sandbox, as before."New value: +"Optional. Which sandboxes get the secret: those matching labels, those named in sandboxes, and every copy of the Apps named in apps. Any other sandbox of the organization sees no placeholder and its requests never carry the value. {} gives it back to every sandbox. Absent when replacing a secret: the scope it has stays, so a new value never widens who gets it. Absent on a new secret: every sandbox, as before."
    • addedInput schema / properties / only / properties / apps
      Added value: +{
      +  "description": "Every copy of these Apps or Functions (their ids) gets the secret, whatever its version: copies made by later deploys, restarts and scaling too. A deploy names the secrets its copies see as environment variables (secrets on POST /v1/apps/{id}/deploys).",
      +  "items": {
      +    "format": "uuid",
      +    "type": "string"
      +  },
      +  "type": "array"
      +}
  5. Changed2 schema fields changed
    • changedInput schema / properties / action / enum
      Previous value: -[
      -  "set",
      -  "list",
      -  "delete",
      -  "jobs_list",
      -  "jobs_get",
      -  "jobs_put",
      -  "jobs_rotate",
      -  "jobs_delete",
      -  "jobs_reveal"
      -]New value: +[
      +  "set",
      +  "list",
      +  "delete",
      +  "jobs_list",
      +  "jobs_get",
      +  "jobs_put",
      +  "jobs_rotate",
      +  "jobs_delete",
      +  "jobs_share",
      +  "jobs_reveal"
      +]
    • addedInput schema / properties / agents
      Added value: +{
      +  "description": "share: the principalId of each agent (GET /v1/me) that may use it besides the key that stored it; [] leaves only that key.",
      +  "items": {
      +    "type": "string"
      +  },
      +  "type": "array"
      +}
  6. Changed1 schema field changed
    • addedInput schema / properties / only
      Added value: +{
      +  "additionalProperties": false,
      +  "description": "Optional. Which sandboxes get the secret: those matching labels, and those named in sandboxes. Any other sandbox of the organization sees no placeholder and its requests never carry the value. {} gives it back to every sandbox. Absent when replacing a secret: the scope it has stays, so a new value never widens who gets it. Absent on a new secret: every sandbox, as before.",
      +  "properties": {
      +    "labels": {
      +      "description": "Sandboxes whose labels match any one of these selectors get the secret, including ones created or labelled later.",
      +      "items": {
      +        "additionalProperties": {
      +          "type": "string"
      +        },
      +        "description": "A selector: a sandbox whose labels hold every one of these key/value pairs.",
      +        "minProperties": 1,
      +        "type": "object"
      +      },
      +      "type": "array"
      +    },
      +    "sandboxes": {
      +      "description": "These sandboxes (ids of this organization's sandboxes) get the secret.",
      +      "items": {
      +        "format": "uuid",
      +        "type": "string"
      +      },
      +      "type": "array"
      +    }
      +  },
      +  "type": "object"
      +}
  7. Changed2 schema fields changed
    • changedInput schema / properties / header / description
      Previous value: -"Optional. Set this header on every request to the hosts, replacing one the sandbox sent, so code needs no placeholder at all."New value: +"Optional. Set this header on every request to the hosts, replacing one the sandbox sent, so code needs no placeholder at all; the value then goes into this header and nowhere else. Without it, the placeholder is replaced only in a credential header: Authorization, x-api-key, x-goog-api-key, api-key, xi-api-key, x-subscription-token, private-token."
    • changedInput schema / properties / rules / items / properties / paths / description
      Previous value: -"Exact paths, or prefixes ending in /* for every path under them. Written canonically: starting with /, no . or .. segments, no ; or \\, no encoded slash."New value: +"Exact paths, or prefixes ending in /* for every path under them. Written canonically: starting with /, no . or .. segments, no ; or \\, no encoded slash. An escaped character other than a letter, digit, -, ., _ or ~ matches only the same escape: a client that sends %3A needs a rule with %3A, not :."
  8. Changed1 schema field changed
    • changedInput schema / properties / rules / description
      Previous value: -"Optional, paid accounts only. The value goes only into requests a rule allows, by method and path. A request whose path could be read two ways (an encoded slash, a semicolon, a backslash) gets no secret that has rules. Absent: every request to the hosts. Replacing a secret without rules clears them."New value: +"Optional, for an account with credit. The value goes only into requests a rule allows, by method and path. A request whose path could be read two ways (an encoded slash, a semicolon, a backslash) gets no secret that has rules. Absent: every request to the hosts. Replacing a secret without rules clears them."
  9. Changed1 schema field changed
    • changedInput schema / properties / idempotencyKey / description
      Previous value: -"Unique per call; reuse it only to retry this exact call after a lost reply or a temporary error."New value: +"Optional: left out, one is made and returned as idempotencyKey. Send it back only to retry this exact call after a temporary error."
  10. Changed7 schema fields changed
    • changedInput schema / properties / action / enum
      Previous value: -[
      -  "set",
      -  "list",
      -  "delete"
      -]New value: +[
      +  "set",
      +  "list",
      +  "delete",
      +  "jobs_list",
      +  "jobs_get",
      +  "jobs_put",
      +  "jobs_rotate",
      +  "jobs_delete",
      +  "jobs_reveal"
      +]
    • addedInput schema / properties / after
      Added value: +{
      +  "type": "string"
      +}
    • addedInput schema / properties / expectedVersion
      Added value: +{
      +  "maximum": 2147483646,
      +  "minimum": 1,
      +  "type": "integer"
      +}
    • addedInput schema / properties / id
      Added value: +{
      +  "type": "string"
      +}
    • addedInput schema / properties / idempotencyKey
      Added value: +{
      +  "description": "Unique per call; reuse it only to retry this exact call after a lost reply or a temporary error.",
      +  "type": "string"
      +}
    • addedInput schema / properties / limit
      Added value: +{
      +  "maximum": 100,
      +  "minimum": 1,
      +  "type": "integer"
      +}
    • addedInput schema / properties / version
      Added value: +{
      +  "maximum": 2147483646,
      +  "minimum": 1,
      +  "type": "integer"
      +}
  11. Added

TDQS

A4.5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only say destructive/openWorld/readOnly false; the description carries the real burden and does so richly: values are never returned, delete does not revoke the provider token, reveal needs its own permission, versioning and expectedVersion 409 behavior, exposed requires exec on each write, and the exact permission model (storing key, named agents, person) for list/bind/reveal/rotate/delete. It is consistent with destructiveHint.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The content is mostly relevant and front-loads the core concept, but it is delivered as a single dense run-on paragraph with no line breaks or per-action structure, making it hard to scan for 11 actions and 20 parameters. It is adequately sized for the complexity but poorly structured.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description still explains what list and get return (names, kind, version, hosts, header, placeholder; never values) and how pagination works via next/after. Combined with coverage of permissions, version conflicts, and the jobs_* lifecycle, it is sufficient for an agent to invoke the tool correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is already 85%, but the description adds the crucial action-to-parameter mapping (e.g. set(name, value, hosts?, header?, format?, rules?, only?, githubApp?, git?, api?, env?, exposed?, expectedVersion?)) and explains cross-field constraints like header/format pairing and exposed requiring sandboxes or apps rather than labels. This is meaningfully more than the schema alone, though several parameter details are duplicated from the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states the resource (secrets/API keys), the core mechanism (placeholder in sandbox, egress proxy injects the value on HTTPS to named hosts), and then enumerates every action (set, list, get, delete, jobs_*) with a specific verb. It explicitly distinguishes the jobs_* family and points to runtime_jobs for binding, so an agent can tell it apart from siblings like runtime_sandboxes or runtime_jobs.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives concrete usage context per action (e.g. delete does not revoke at the provider, reveal requires its own permission so 'prefer binding', share replaces the agents named) and names an alternative workflow via runtime_jobs create input.secrets. It lacks a broad 'use this when / not when' exclusion statement across the whole tool, so not a 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.