Skip to main content
Glama

Register SAP Agent (Blocked in hosted Steve — use the builder)

sap_register_agent

DISABLED: this direct write cannot run in hosted Steve (no server keypair) and fails with "Explicit user approval is required" or hosted_local_signer_required. In Steve web the ONLY registration path is sap_build_agent_register_transaction → Steve UI preview → user approval → browser signature → finalize submit. In LOCAL sap_payments setups use sap_payments_register_agent instead. SAP MCP context: Do not use this raw SDK wrapper for production registration. The canonical registration path is sap_payments_register_agent, because it confirms the account, audits the protocol treasury fee, and fails closed when protocolComplete is false. Hosted accountless SAP MCP rejects direct registration before x402 payment because OOBE never custodies user wallet keys. Use sap_agent_identity_plan first, then sap_payments_register_agent with confirm:true.

SAP MCP execution guidance: Intent: local-signer write workflow. Pricing: paid value-action; preview cost and transaction effects before user confirmation. Routing: hosted accountless write is blocked; do not call this as a paid hosted write and no x402 payment should be charged. Use sap_payments_register_agent when user signing is required. Signer boundary: user-controlled local profile or external signer; OOBE hosted MCP remains non-custodial.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
nameNoRequired public display name for the SAP agent. Keep it stable enough for explorers and humans.
agentIdNoOptional stable lowercase agent id, for example solking. This is separate from the on-chain agent PDA.
pricingNoOptional pricing tiers advertised by the agent. Use tokenType usdc + settlementMode x402 for pay.sh/x402 agent commerce.
agentUriNoOptional public HTTPS/IPFS/Arweave/Kommodo URI for the agent profile metadata or profile page. Never use local desktop file paths.
protocolsNoRequired protocol tags the agent supports, for example sap, mcp, jupiter, pyth, metaplex, sns, x402, payments.
descriptionNoRequired public description of what the agent does, which protocols it can use, and its safety/trust boundaries.
metadataUriNoAlias for agentUri. Prefer a public JSON metadata document containing name, description, image, external_url, attributes, sap, metaplex, sns, and x402 fields.
capabilitiesNoRequired capability list. Prefer object form for production; strings are accepted as shorthand.
x402EndpointNoOptional public x402 discovery/payment endpoint, usually https://host/.well-known/x402 for external agent services.

Output Schema

TableJSON Schema
NameRequiredDescriptionDefault
contentYesMCP content blocks returned to the caller.
isErrorNoTrue when the tool result represents an application-level error.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed2 schema fields changed
    • changedInput schema / description
      Previous value: -"Register SAP Agent (Raw SDK Deprecated) input schema. Intent: local-signer write workflow. Pricing: paid value-action; preview cost and transaction effects before user confirmation. Routing: hosted accountless write is blocked; do not call this as a paid hosted write and no x402 payment should be charged. Use sap_payments_register_agent when user signing is required. Signer boundary: user-controlled local profile or external signer; OOBE hosted MCP remains non-custodial. Use exact field names from this schema; do not guess aliases or include private key material."New value: +"Register SAP Agent (Blocked in hosted Steve — use the builder) input schema. Intent: local-signer write workflow. Pricing: paid value-action; preview cost and transaction effects before user confirmation. Routing: hosted accountless write is blocked; do not call this as a paid hosted write and no x402 payment should be charged. Use sap_payments_register_agent when user signing is required. Signer boundary: user-controlled local profile or external signer; OOBE hosted MCP remains non-custodial. Use exact field names from this schema; do not guess aliases or include private key material."
    • changedInput schema / properties / pricing / items / properties / volumeCurve / items / description
      Previous value: -"Volume Curve parameter for Register SAP Agent (Raw SDK Deprecated)."New value: +"Volume Curve parameter for Register SAP Agent (Blocked in hosted Steve — use the builder)."
  2. Changed5 schema fields changed
    • addedInput schema / description
      Added value: +"Register SAP Agent (Raw SDK Deprecated) input schema. Intent: local-signer write workflow. Pricing: paid value-action; preview cost and transaction effects before user confirmation. Routing: hosted accountless write is blocked; do not call this as a paid hosted write and no x402 payment should be charged. Use sap_payments_register_agent when user signing is required. Signer boundary: user-controlled local profile or external signer; OOBE hosted MCP remains non-custodial. Use exact field names from this schema; do not guess aliases or include private key material."
    • changedInput schema / properties / capabilities / items / description
      Previous value: -"Capabilities parameter for Register SAP Agent (Raw SDK Deprecated)."New value: +"Capabilities array describing agent/tool capabilities. Use stable IDs, protocol labels, and human-readable descriptions; validate category values before writes."
    • changedInput schema / properties / capabilities / items / oneOf
      Previous value: -[
      -  {
      -    "description": "Capability id shorthand, for example jupiter:swap, pyth:price, metaplex:identity, sns:identity, or risk:management.",
      -    "type": "string"
      -  },
      -  {
      -    "additionalProperties": false,
      -    "properties": {
      -      "description": {
      -        "description": "Optional human-readable capability description for agents and explorers.",
      -        "type": "string"
      -      },
      -      "id": {
      -        "description": "Required stable capability id. Use protocol:action naming, for example jupiter:swap, pyth:price, metaplex:identity, sns:identity, x402:payments, or risk:management.",
      -        "type": "string"
      -      },
      -      "protocolId": {
      -        "description": "Optional protocol namespace backing this capability, for example sap, mcp, jupiter, pyth, metaplex, sns, x402, or custom.",
      -        "type": "string"
      -      },
      -      "version": {
      -        "description": "Optional capability version string. Use semver when the capability maps to an API contract.",
      -        "type": "string"
      -      }
      -    },
      -    "required": [
      -      "id"
      -    ],
      -    "type": "object"
      -  }
      -]New value: +[
      +  {
      +    "description": "Capability id shorthand, for example jupiter:swap, pyth:price, metaplex:identity, sns:identity, or risk:management.",
      +    "type": "string"
      +  },
      +  {
      +    "additionalProperties": false,
      +    "description": "Capabilities array describing agent/tool capabilities. Use stable IDs, protocol labels, and human-readable descriptions; validate category values before writes.",
      +    "properties": {
      +      "description": {
      +        "description": "Optional human-readable capability description for agents and explorers.",
      +        "type": "string"
      +      },
      +      "id": {
      +        "description": "Required stable capability id. Use protocol:action naming, for example jupiter:swap, pyth:price, metaplex:identity, sns:identity, x402:payments, or risk:management.",
      +        "type": "string"
      +      },
      +      "protocolId": {
      +        "description": "Optional protocol namespace backing this capability, for example sap, mcp, jupiter, pyth, metaplex, sns, x402, or custom.",
      +        "type": "string"
      +      },
      +      "version": {
      +        "description": "Optional capability version string. Use semver when the capability maps to an API contract.",
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "id"
      +    ],
      +    "type": "object"
      +  }
      +]
    • changedInput schema / properties / pricing / items / description
      Previous value: -"Pricing parameter for Register SAP Agent (Raw SDK Deprecated)."New value: +"Pricing array of x402/pay.sh pricing tiers for the registered agent or tool. Amounts should be denominated explicitly in USDC smallest units when applicable."
    • changedInput schema / properties / protocols / items / description
      Previous value: -"Protocols parameter for Register SAP Agent (Raw SDK Deprecated)."New value: +"Protocols array of protocol identifiers such as sap, mcp, jupiter, pyth, metaplex, sns, or x402."
  3. Changed12 schema fields changed
    • changedInput schema / properties / agentId / description
      Previous value: -"Optional unique agent identifier string"New value: +"Optional stable lowercase agent id, for example solking. This is separate from the on-chain agent PDA."
    • changedInput schema / properties / agentUri / description
      Previous value: -"Optional URI to the agent's off-chain metadata or service endpoint"New value: +"Optional public HTTPS/IPFS/Arweave/Kommodo URI for the agent profile metadata or profile page. Never use local desktop file paths."
    • changedInput schema / properties / capabilities / description
      Previous value: -"Array of capability objects or strings identifying what the agent can do (e.g. \"jupiter:swap\")"New value: +"Required capability list. Prefer object form for production; strings are accepted as shorthand."
    • addedInput schema / properties / capabilities / items
      Added value: +{
      +  "description": "Capabilities parameter for Register SAP Agent (Raw SDK Deprecated).",
      +  "oneOf": [
      +    {
      +      "description": "Capability id shorthand, for example jupiter:swap, pyth:price, metaplex:identity, sns:identity, or risk:management.",
      +      "type": "string"
      +    },
      +    {
      +      "additionalProperties": false,
      +      "properties": {
      +        "description": {
      +          "description": "Optional human-readable capability description for agents and explorers.",
      +          "type": "string"
      +        },
      +        "id": {
      +          "description": "Required stable capability id. Use protocol:action naming, for example jupiter:swap, pyth:price, metaplex:identity, sns:identity, x402:payments, or risk:management.",
      +          "type": "string"
      +        },
      +        "protocolId": {
      +          "description": "Optional protocol namespace backing this capability, for example sap, mcp, jupiter, pyth, metaplex, sns, x402, or custom.",
      +          "type": "string"
      +        },
      +        "version": {
      +          "description": "Optional capability version string. Use semver when the capability maps to an API contract.",
      +          "type": "string"
      +        }
      +      },
      +      "required": [
      +        "id"
      +      ],
      +      "type": "object"
      +    }
      +  ]
      +}
    • changedInput schema / properties / description / description
      Previous value: -"Detailed description of the agent's purpose and capabilities"New value: +"Required public description of what the agent does, which protocols it can use, and its safety/trust boundaries."
    • changedInput schema / properties / metadataUri / description
      Previous value: -"Alias for agentUri — URI to off-chain agent metadata JSON"New value: +"Alias for agentUri. Prefer a public JSON metadata document containing name, description, image, external_url, attributes, sap, metaplex, sns, and x402 fields."
    • changedInput schema / properties / name / description
      Previous value: -"Human-readable name for the SAP agent"New value: +"Required public display name for the SAP agent. Keep it stable enough for explorers and humans."
    • changedInput schema / properties / pricing / description
      Previous value: -"Array of pricing tier objects defining per-call costs, rate limits, and settlement terms"New value: +"Optional pricing tiers advertised by the agent. Use tokenType usdc + settlementMode x402 for pay.sh/x402 agent commerce."
    • addedInput schema / properties / pricing / items
      Added value: +{
      +  "additionalProperties": false,
      +  "description": "Pricing parameter for Register SAP Agent (Raw SDK Deprecated).",
      +  "properties": {
      +    "batchIntervalSec": {
      +      "description": "Optional settlement batch interval in seconds when settlementMode is batched.",
      +      "type": "number"
      +    },
      +    "burstLimit": {
      +      "description": "Optional short-window burst allowance for this tier.",
      +      "type": "number"
      +    },
      +    "maxCallsPerSession": {
      +      "description": "Maximum calls allowed per session for this tier. Defaults to 1000.",
      +      "type": "number"
      +    },
      +    "maxPricePerCall": {
      +      "description": "Optional ceiling price per call in the smallest unit of tokenType.",
      +      "type": "string"
      +    },
      +    "minEscrowDeposit": {
      +      "description": "Optional minimum escrow deposit in the smallest unit of tokenType.",
      +      "type": "string"
      +    },
      +    "minPricePerCall": {
      +      "description": "Optional floor price per call in the smallest unit of tokenType.",
      +      "type": "string"
      +    },
      +    "pricePerCall": {
      +      "description": "Price per call in the smallest unit of tokenType: lamports for sol, micro-USDC for usdc, or base units for spl.",
      +      "type": "string"
      +    },
      +    "rateLimit": {
      +      "description": "Maximum calls per second allowed by this tier. Defaults to 60.",
      +      "type": "number"
      +    },
      +    "settlementMode": {
      +      "description": "Settlement strategy. Use x402 for HTTP 402/pay.sh flows, escrow for prepaid SAP usage ledgers, instant for direct pay-per-call, and batched for periodic settlement.",
      +      "enum": [
      +        "instant",
      +        "escrow",
      +        "batched",
      +        "x402"
      +      ],
      +      "type": "string"
      +    },
      +    "tierId": {
      +      "description": "Stable tier id, for example default, read, premium, value-action, or enterprise.",
      +      "type": "string"
      +    },
      +    "tokenDecimals": {
      +      "description": "Decimals for the payment token. Defaults to 6 for usdc and 9 for sol when omitted.",
      +      "type": "number"
      +    },
      +    "tokenMint": {
      +      "description": "Optional SPL token mint public key. Required when tokenType is spl. For mainnet USDC use EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v.",
      +      "type": "string"
      +    },
      +    "tokenType": {
      +      "description": "Payment token type. Use usdc for x402/pay.sh agent commerce. Use spl only with tokenMint.",
      +      "enum": [
      +        "sol",
      +        "usdc",
      +        "spl"
      +      ],
      +      "type": "string"
      +    },
      +    "volumeCurve": {
      +      "description": "Optional volume discounts. Each item lowers pricePerCall after a call threshold.",
      +      "items": {
      +        "additionalProperties": false,
      +        "description": "Volume Curve parameter for Register SAP Agent (Raw SDK Deprecated).",
      +        "properties": {
      +          "afterCalls": {
      +            "description": "Call count threshold where this price starts.",
      +            "type": "number"
      +          },
      +          "pricePerCall": {
      +            "description": "Discounted price per call in the smallest unit of tokenType.",
      +            "type": "string"
      +          }
      +        },
      +        "required": [
      +          "afterCalls",
      +          "pricePerCall"
      +        ],
      +        "type": "object"
      +      },
      +      "type": "array"
      +    }
      +  },
      +  "required": [
      +    "pricePerCall"
      +  ],
      +  "type": "object"
      +}
    • changedInput schema / properties / protocols / description
      Previous value: -"Array of protocol identifiers the agent supports (e.g. \"jupiter\", \"drift\")"New value: +"Required protocol tags the agent supports, for example sap, mcp, jupiter, pyth, metaplex, sns, x402, payments."
    • changedInput schema / properties / protocols / items / description
      Previous value: -"Protocols parameter for Register SAP Agent."New value: +"Protocols parameter for Register SAP Agent (Raw SDK Deprecated)."
    • changedInput schema / properties / x402Endpoint / description
      Previous value: -"Optional x402 payment endpoint URL for HTTP-based agent payments"New value: +"Optional public x402 discovery/payment endpoint, usually https://host/.well-known/x402 for external agent services."
  4. First observed

TDQS

A4.1/5.0
Behavior5/5

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

Beyond annotations (readOnlyHint=false, destructiveHint=false, openWorldHint=true), the description discloses the actual failure modes ('Explicit user approval is required', hosted_local_signer_required), the reason (no server keypair, OOBE never custodies keys), the signer boundary (user-controlled local profile or external signer; non-custodial), and the requirement to preview cost and transaction effects before user confirmation. This is deep behavioral context that annotations alone could not convey. No contradiction with the annotations — readOnlyHint=false correctly aligns with 'direct write.'

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

Conciseness2/5

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

The description is severely bloated and repetitive. The 'SAP MCP execution guidance' block repeats routing statements already present in the opening (hosted accountless write is blocked, local-signer workflow, use sap_payments_register_agent), and the same guidance is duplicated verbatim in the input-schema description. The DISABLED warning is properly front-loaded, but the remaining text cycles through the same constraints three times. Every sentence does not earn its place; substantial trimming would improve it without losing information.

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 tool with 9 parameters, no required fields, a rich output schema, and a disabled state, the description is highly complete — it covers failure modes, alternatives, routing, pricing expectations, and signer boundaries. The agent is never left guessing about how to handle this tool. It loses a point only because the completeness is achieved through redundancy rather than efficiency, and the sheer volume of repetition dilutes the actionable content.

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

Parameters3/5

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

Schema description coverage is 100%, so every parameter (name, agentId, pricing, agentUri, protocols, description, metadataUri, capabilities, x402Endpoint) is already documented in the schema with rich detail (e.g., 'pricePerCall in the smallest unit of tokenType: lamports for sol, micro-USDC for usdc'). The description itself adds no parameter-level semantics beyond the schema, so the baseline 3 is appropriate since the schema carries the load. No compensation needed.

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

Purpose4/5

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

The description clearly states the tool's verb and resource (register an SAP agent) and immediately identifies it as DISABLED, which distinguishes it from functional siblings like sap_payments_register_agent and sap_build_agent_register_transaction. The core purpose is evident: this is a raw SDK wrapper for agent registration that is blocked in hosted Steve. It loses a point because the primary intent communicated is 'do not use this,' which muddles the traditional purpose statement, though it remains unambiguous about what the tool would do if callable.

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?

This description is exemplary on routing. It explicitly names the canonical alternative (sap_payments_register_agent), the builder path (sap_build_agent_register_transaction → UI preview → user approval → browser signature → finalize), and the local fallback (sap_payments_register_agent for local setups). It gives precise conditions: use confirm:true, use sap_agent_identity_plan first, and explicitly warns not to charge x402 payments or call this as a paid hosted write. No inference is required; the agent knows exactly when and when-not to use this tool.

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.