Skip to main content
Glama
Aidress-ai
by Aidress-ai

update_agent

Modify an existing agent's profile in Aidress by providing only fields to change; omitted fields remain unchanged.

Instructions

Update an existing agent's profile fields. Only provided fields are changed; omitted fields remain unchanged.

Auth: any one of —

  • Bearer agent key: on the hosted remote connector, send your own Authorization: Bearer header on the MCP connection (this is what it authenticates with automatically). Locally: set AIDRESS_AGENT_KEY env var before starting the server, or call set_agent_key("") once in-session after registering.

  • Ed25519 keypair: set AIDRESS_KEYPAIR_PATH (HTTP Message Signature, RFC 9421)

  • Org key: must own this agent. On the hosted remote connector, send your org's X-API-KEY header on the MCP connection itself; locally, set AIDRESS_API_KEY in the server environment. Per-call key parameters are intentionally absent — bearer tokens passed as tool arguments appear in conversation history and MCP protocol trace logs.

agent_id — the agent to update (cannot be changed)

contact_email — where rotate_agent_key's claim-token link is sent when this agent's key is rotated without an org/admin credential.

public_key — base64url-encoded Ed25519 public key (32 raw bytes). Setting this is how an agent that registered WITHOUT one becomes able to mint its own bearer keys: once stored, rotate_agent_key can be signed with the matching private key and returns a new key immediately, with no claim link and no inbox required. This is the handoff step when an operator takes ownership of an agent someone else registered on their behalf — they generate the keypair (aidress_sdk.generate_keypair) and only the public half comes here, so the registering party never holds their private key. Replaces any previously stored key for this agent. Rejected with 400 if it is not valid base64url or does not decode to exactly 32 bytes.

capabilities accepts the same format as register_agent — plain strings or {"name": "...", "weight": N} dicts.

payload_schema — semantic conventions for this agent's payloads. Dict with any of: currency (e.g. "USD"), date_format (e.g. "ISO8601"), quantity_unit (e.g. "individual_items"), weight_unit (e.g. "kg"). Only these four keys are accepted; unknown keys return 422. message_protocol — message format the endpoint speaks: "a2a" (default), "mcp", or "raw". Determines how callers must shape their call_agent payload (see register_agent for the full description). signup_help — link/instructions for callers to obtain their own credential, if your endpoint requires one (see protocol_reference("register_advanced_fields") for details). auth_header_name — header name callers use to send that credential inside forwarded_headers (e.g. "X-Api-Key", "Authorization"). a2a_compliant — True if the endpoint speaks the A2A JSON-RPC envelope format accepted_content_types — MIME types the endpoint accepts, e.g. ["application/json"]

pull_from_agent_id — SANDBOX ONLY; refreshes a sandbox draft from its paired live agent's current values. See protocol_reference("update_agent_advanced_fields").

price_schedule, payment_network, payment_pay_to, payment_asset — see register_agent; same fields, same rule (all three payment_* fields required together whenever price_schedule is set in this call).

Returns the updated trust object.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
agent_idYes
org_nameNo
protocolNo
specialtyNo
org_domainNo
public_keyNo
signup_helpNo
capabilitiesNo
contact_infoNo
endpoint_urlNo
http_methodsNo
a2a_compliantNo
contact_emailNo
payment_assetNo
payload_schemaNo
payment_pay_toNo
price_scheduleNo
payment_networkNo
settlement_railNo
auth_header_nameNo
message_protocolNo
pull_from_agent_idNo
accepted_terms_formatNo
accepted_content_typesNo

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed2 schema fields changedv0.6.0
    • addedInput schema / properties / public_key
      Added value: +{
      +  "anyOf": [
      +    {
      +      "type": "string"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null,
      +  "title": "Public Key"
      +}
    • changedInput schema / properties / settlement_rail / anyOf
      Previous value: -[
      -  {
      -    "enum": [
      -      "x402",
      -      "stripe",
      -      "manual"
      -    ],
      -    "type": "string"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]New value: +[
      +  {
      +    "enum": [
      +      "x402",
      +      "stripe",
      +      "manual"
      +    ],
      +    "type": "string"
      +  },
      +  {
      +    "items": {
      +      "enum": [
      +        "x402",
      +        "stripe",
      +        "manual"
      +      ],
      +      "type": "string"
      +    },
      +    "type": "array"
      +  },
      +  {
      +    "type": "null"
      +  }
      +]
  2. Changed11 schema fields changedv0.4.1
    • changedInput schema / properties / accepted_terms_format / anyOf
      Previous value: -[
      -  {
      -    "type": "string"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]New value: +[
      +  {
      +    "enum": [
      +      "JSON",
      +      "XML"
      +    ],
      +    "type": "string"
      +  },
      +  {
      +    "type": "null"
      +  }
      +]
    • addedInput schema / properties / contact_email
      Added value: +{
      +  "anyOf": [
      +    {
      +      "type": "string"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null,
      +  "title": "Contact Email"
      +}
    • changedInput schema / properties / http_methods / anyOf
      Previous value: -[
      -  {
      -    "items": {
      -      "type": "string"
      -    },
      -    "type": "array"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]New value: +[
      +  {
      +    "items": {
      +      "enum": [
      +        "GET",
      +        "POST"
      +      ],
      +      "type": "string"
      +    },
      +    "type": "array"
      +  },
      +  {
      +    "type": "null"
      +  }
      +]
    • changedInput schema / properties / message_protocol / anyOf
      Previous value: -[
      -  {
      -    "type": "string"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]New value: +[
      +  {
      +    "enum": [
      +      "a2a",
      +      "mcp",
      +      "raw"
      +    ],
      +    "type": "string"
      +  },
      +  {
      +    "type": "null"
      +  }
      +]
    • addedInput schema / properties / payment_asset
      Added value: +{
      +  "anyOf": [
      +    {
      +      "type": "string"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null,
      +  "title": "Payment Asset"
      +}
    • addedInput schema / properties / payment_network
      Added value: +{
      +  "anyOf": [
      +    {
      +      "type": "string"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null,
      +  "title": "Payment Network"
      +}
    • addedInput schema / properties / payment_pay_to
      Added value: +{
      +  "anyOf": [
      +    {
      +      "type": "string"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null,
      +  "title": "Payment Pay To"
      +}
    • addedInput schema / properties / price_schedule
      Added value: +{
      +  "anyOf": [
      +    {
      +      "items": {
      +        "additionalProperties": true,
      +        "type": "object"
      +      },
      +      "type": "array"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null,
      +  "title": "Price Schedule"
      +}
    • changedInput schema / properties / protocol / anyOf
      Previous value: -[
      -  {
      -    "type": "string"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]New value: +[
      +  {
      +    "enum": [
      +      "REST",
      +      "GraphQL",
      +      "gRPC"
      +    ],
      +    "type": "string"
      +  },
      +  {
      +    "type": "null"
      +  }
      +]
    • addedInput schema / properties / pull_from_agent_id
      Added value: +{
      +  "anyOf": [
      +    {
      +      "type": "string"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null,
      +  "title": "Pull From Agent Id"
      +}
    • changedInput schema / properties / settlement_rail / anyOf
      Previous value: -[
      -  {
      -    "type": "string"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]New value: +[
      +  {
      +    "enum": [
      +      "x402",
      +      "stripe",
      +      "manual"
      +    ],
      +    "type": "string"
      +  },
      +  {
      +    "type": "null"
      +  }
      +]
  3. Changed6 schema fields changedv0.2.6
    • addedInput schema / properties / auth_header_name
      Added value: +{
      +  "anyOf": [
      +    {
      +      "type": "string"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null,
      +  "title": "Auth Header Name"
      +}
    • removedInput schema / properties / contact_email
      Removed value: -{
      -  "anyOf": [
      -    {
      -      "type": "string"
      -    },
      -    {
      -      "type": "null"
      -    }
      -  ],
      -  "default": null,
      -  "title": "Contact Email"
      -}
    • addedInput schema / properties / contact_info
      Added value: +{
      +  "anyOf": [
      +    {
      +      "type": "string"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null,
      +  "title": "Contact Info"
      +}
    • addedInput schema / properties / http_methods
      Added value: +{
      +  "anyOf": [
      +    {
      +      "items": {
      +        "type": "string"
      +      },
      +      "type": "array"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null,
      +  "title": "Http Methods"
      +}
    • addedInput schema / properties / message_protocol
      Added value: +{
      +  "anyOf": [
      +    {
      +      "type": "string"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null,
      +  "title": "Message Protocol"
      +}
    • addedInput schema / properties / signup_help
      Added value: +{
      +  "anyOf": [
      +    {
      +      "type": "string"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null,
      +  "title": "Signup Help"
      +}
  4. First observedv0.1.5

TDQS

A4.3/5.0
Behavior5/5

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

With no annotations, the description carries the full behavioral burden and does so richly: three auth mechanisms with concrete setup steps, public_key replacement semantics and 400-on-invalid behavior, payload_schema's four-key allowlist with 422 on unknown keys, the mutual requirement of all three payment_* fields, and the sandbox-only restriction. It even explains why key params are deliberately absent from 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.

Conciseness4/5

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

Front-loaded with purpose, then a well-organized auth block, then parameter notes; the formatting is scannable. The auth block is heavy and largely duplicated boilerplate relative to the tool's core behavior, which blunts conciseness, but for a 24-param mutation tool the overall length is defensible.

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?

Given 24 parameters, no annotations, and no output schema, the description supplies the auth model, mutation semantics, and validation rules an agent needs, plus a one-line return statement ('Returns the updated trust object'). A few unmentioned params and no detail on the trust object's shape keep it short of fully complete.

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 0% across 24 params, so the description must compensate; it does so with high-value semantics for public_key (base64url, 32 bytes, replaces prior key, enables self-minted bearer keys), capabilities, payload_schema, message_protocol, auth_header_name and the payment_* group. It leaves several params (org_name, protocol, specialty, org_domain, contact_info, endpoint_url, http_methods, settlement_rail, accepted_terms_format) unaddressed, but the covered ones carry real meaning beyond their names.

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 ('Update an existing agent's profile fields') and immediately adds the partial-update semantics ('Only provided fields are changed; omitted fields remain unchanged'), which distinguishes it from register_agent's create semantics. Reference to register_agent for field formats further anchors its role.

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

Usage Guidelines3/5

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

Usage is implied rather than stated: it explains partial-update behavior and gives three auth paths, but never explicitly says when to pick this over siblings like register_agent or promote_sandbox_agent, nor does it state preconditions beyond auth. The SANDBOX ONLY note on pull_from_agent_id is the one clear usage constraint.

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