Skip to main content
Glama

Update SAP Agent

sap_update_agent

Local-signer-only: update the connected wallet SAP agent using SDK AgentModule.update. Hosted accountless SAP MCP rejects this direct write before x402 payment; hosted users should call sap_payments_update_agent from the local sap_payments bridge. SAP MCP context: Use this after sap_register_agent to refresh name, description, capabilities, pricing, supported protocols, x402 endpoint, or metadataUri. For NFT-backed identity changes, update the Metaplex asset first when needed, then point the SAP agent metadataUri at the current metadata document.

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_update_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
nameNoOptional replacement display name. Omit to keep the current name.
agentIdNoOptional replacement stable agent id. Omit to keep current agentId.
pricingNoOptional full replacement pricing tier list. Omit to keep current pricing.
agentUriNoOptional replacement public URI for agent metadata/profile. Use this to update pictures after uploading metadata to IPFS, Arweave, Kommodo, or HTTPS.
protocolsNoOptional full replacement protocol list. Omit to keep current protocols.
descriptionNoOptional replacement description. Omit to keep the current description.
metadataUriNoAlias for agentUri. Use a public metadata JSON URI; never use a desktop file path.
capabilitiesNoOptional full replacement capability list. Omit to keep current capabilities; do not send only the new item unless replacing the whole list is intended.
x402EndpointNoOptional replacement x402 discovery/payment endpoint. Omit to keep current endpoint.

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. Changed5 schema fields changed
    • addedInput schema / description
      Added value: +"Update SAP Agent 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_update_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 Update SAP Agent."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 Update SAP Agent."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 Update SAP Agent."New value: +"Protocols array of protocol identifiers such as sap, mcp, jupiter, pyth, metaplex, sns, or x402."
  2. Changed11 schema fields changed
    • removedInput schema / additionalProperties
      Removed value: -true
    • removedInput schema / description
      Removed value: -"Object containing any combination of agent fields to update (name, description, capabilities, pricing, protocols, agentId, agentUri, x402Endpoint)"
    • addedInput schema / properties / agentId
      Added value: +{
      +  "description": "Optional replacement stable agent id. Omit to keep current agentId.",
      +  "type": "string"
      +}
    • addedInput schema / properties / agentUri
      Added value: +{
      +  "description": "Optional replacement public URI for agent metadata/profile. Use this to update pictures after uploading metadata to IPFS, Arweave, Kommodo, or HTTPS.",
      +  "type": "string"
      +}
    • addedInput schema / properties / capabilities
      Added value: +{
      +  "description": "Optional full replacement capability list. Omit to keep current capabilities; do not send only the new item unless replacing the whole list is intended.",
      +  "items": {
      +    "description": "Capabilities parameter for Update SAP Agent.",
      +    "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"
      +      }
      +    ]
      +  },
      +  "type": "array"
      +}
    • addedInput schema / properties / description
      Added value: +{
      +  "description": "Optional replacement description. Omit to keep the current description.",
      +  "type": "string"
      +}
    • addedInput schema / properties / metadataUri
      Added value: +{
      +  "description": "Alias for agentUri. Use a public metadata JSON URI; never use a desktop file path.",
      +  "type": "string"
      +}
    • addedInput schema / properties / name
      Added value: +{
      +  "description": "Optional replacement display name. Omit to keep the current name.",
      +  "type": "string"
      +}
    • addedInput schema / properties / pricing
      Added value: +{
      +  "description": "Optional full replacement pricing tier list. Omit to keep current pricing.",
      +  "items": {
      +    "additionalProperties": false,
      +    "description": "Pricing parameter for Update SAP Agent.",
      +    "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 Update SAP Agent.",
      +          "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"
      +  },
      +  "type": "array"
      +}
    • addedInput schema / properties / protocols
      Added value: +{
      +  "description": "Optional full replacement protocol list. Omit to keep current protocols.",
      +  "items": {
      +    "description": "Protocols parameter for Update SAP Agent.",
      +    "type": "string"
      +  },
      +  "type": "array"
      +}
    • addedInput schema / properties / x402Endpoint
      Added value: +{
      +  "description": "Optional replacement x402 discovery/payment endpoint. Omit to keep current endpoint.",
      +  "type": "string"
      +}
  3. First observed

TDQS

A4.5/5.0
Behavior5/5

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

While annotations already indicate a non-read-only, non-destructive write, the description adds crucial behavioral context: local-signer-only, blocked for hosted, need for user confirmation, and no x402 payment. No contradiction with annotations.

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 description is verbose (over 200 words) with some repetition (execution guidance block mirrors input schema description). It is well-structured and front-loaded but could be more concise.

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?

Despite no required parameters and an output schema existing, the description covers all usage context: prerequisites, alternatives, execution guidance, signer boundary, and warnings about hosted routing. It is complete for the tool's complexity.

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 coverage is 100% (all 9 parameters have descriptions). The description adds minimal extra meaning beyond the schema, only noting the metadataUri ordering requirement (update Metaplex asset first). Baseline of 3 is appropriate.

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 clearly states it updates an SAP agent, lists specific fields (name, description, capabilities, etc.), and distinguishes from the sibling tool sap_payments_update_agent for hosted users.

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?

Explicitly says when to use (after sap_register_agent) and when not to use (hosted users should use sap_payments_update_agent). Also provides context about local-signer-only and alternative routing.

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.