Skip to main content
Glama

Request External Resource

request_external_resource

Request the user's own credential for an outside service on this project: their OpenAI or Anthropic key, an external Postgres database (type POSTGRES), or any other service's key (type GENERIC, with secret_env_vars). Floot-managed resources (database, auth, push, …) need no user input: use provision_resource. Request it early and keep building; code can reference process.env. before the user connects. Never ask the user to paste a secret into the chat.

Input Schema

NameRequiredDescriptionDefault
nameNoDisplay name for GENERIC requests, e.g. 'Stripe'.
typeYes
projectIdYes
instructionsNoWhy the key is needed / where the user can find it — shown to the user in the dialog.
reuse_existingNoDefault true: a matching credential the owner already saved (same name or env var) is attached without asking the user. Pass false when this project needs its OWN, separate credential (a test or copied project, a secret that must differ from their other projects): the user gets a dialog to create a new one, under a name no saved credential uses.
secret_env_varsNoRequired for GENERIC: the env var name(s) your code reads, e.g. ["STRIPE_SECRET_KEY"]. Each is a required field in the user's dialog.
optional_env_varsNoGENERIC only: env vars the user can leave blank and fill in later, e.g. a webhook signing secret.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed1 schema field changed
    • addedInput schema / properties / reuse_existing
      Added value: +{
      +  "description": "Default true: a matching credential the owner already saved (same name or env var) is attached without asking the user. Pass false when this project needs its OWN, separate credential (a test or copied project, a secret that must differ from their other projects): the user gets a dialog to create a new one, under a name no saved credential uses.",
      +  "type": "boolean"
      +}
  2. Changed2 schema fields changed
    • changedInput schema / properties / optional_env_vars / description
      Previous value: -"GENERIC only: env vars the user may leave blank at connect time and fill in later — e.g. a webhook signing secret that only exists after the webhook endpoint is created. Rendered as optional fields; names here need not repeat secret_env_vars (a name in both stays required). To collect a skipped value later, call request_external_resource again — the connected resource opens in an update dialog."New value: +"GENERIC only: env vars the user can leave blank and fill in later, e.g. a webhook signing secret."
    • changedInput schema / properties / secret_env_vars / description
      Previous value: -"REQUIRED for GENERIC (the call is refused without it): the env var name(s) the secret(s) should be exposed as — e.g. [\"STRIPE_SECRET_KEY\"]. Name what you will actually reference as process.env.<NAME> in code; it is the identity of the request, what account-credential reuse matches on, and what the value is stored under, so there is no usable default. Every var listed here is a REQUIRED field in the connect dialog — the user cannot submit while one is blank, so only list vars the user can produce right now; anything they'd fill in later belongs in optional_env_vars instead."New value: +"Required for GENERIC: the env var name(s) your code reads, e.g. [\"STRIPE_SECRET_KEY\"]. Each is a required field in the user's dialog."
  3. Changed1 schema field changed
    • changedInput schema / properties / secret_env_vars / description
      Previous value: -"GENERIC only: the env var name(s) the secret(s) should be exposed as (default RESOURCE_API_KEY). Every var listed here is a REQUIRED field in the connect dialog — the user cannot submit while one is blank, so only list vars the user can produce right now; anything they'd fill in later belongs in optional_env_vars instead."New value: +"REQUIRED for GENERIC (the call is refused without it): the env var name(s) the secret(s) should be exposed as — e.g. [\"STRIPE_SECRET_KEY\"]. Name what you will actually reference as process.env.<NAME> in code; it is the identity of the request, what account-credential reuse matches on, and what the value is stored under, so there is no usable default. Every var listed here is a REQUIRED field in the connect dialog — the user cannot submit while one is blank, so only list vars the user can produce right now; anything they'd fill in later belongs in optional_env_vars instead."
  4. First observed

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already declare the safety profile (readOnlyHint=false, openWorldHint=true, destructiveHint=false), and the description adds non-obvious behavior: the request is non-blocking (code can reference process.env.<NAME> before the user connects) and it surfaces a user-facing dialog. It does not say what the call returns or what happens if the user declines/never connects, so it stops short of fully closing the loop.

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

Conciseness4/5

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

Four sentences, front-loaded with the purpose and type breakdown before the routing and safety guidance. Dense but each sentence carries distinct information; the type enumeration is slightly listy but still earns its place.

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

Completeness4/5

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

For a 7-parameter, no-output-schema tool this covers purpose, the managed-vs-external split, the sibling alternative, timing, and a security guardrail. The main residual gap is the return/lifecycle story (what an agent receives back, how it learns the credential was connected), which nothing else in the structured data supplies.

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 71% and the schema already documents name, instructions, reuse_existing, secret_env_vars and optional_env_vars well. The description still adds meaning the schema does not: which type values require secret_env_vars (GENERIC) and the distinction between user-supplied external credentials versus managed ones.

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?

States a specific verb and resource ('Request the user's own credential for an outside service on this project') and enumerates the concrete cases (OpenAI/Anthropic key, POSTGRES, GENERIC with secret_env_vars). It also explicitly distinguishes itself from the sibling provision_resource, so an agent can route between them without opening either schema.

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

Usage Guidelines5/5

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

Explicit when-to-use ('Floot-managed resources ... use provision_resource' covers the when-not), plus timing guidance ('request it early and keep building') and a hard exclusion ('Never ask the user to paste a secret into the chat'). The alternative tool is named with the condition that selects it.

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.

Resources