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

register_agent

Add a new AI agent or human to the Aidress trust registry by supplying an agent ID and optional contact or public key details.

Instructions

Register a new AI agent (or human) with the Aidress trust registry.

Required: agent_id — unique identifier for this agent (e.g. "my_agent_01")

Optional, org-affiliated agents only: org_name — your organisation name. One agent per org_domain. Omit if you're an individual/independent agent with no org identity to supply — this is not required even when endpoint_url is set. org_domain — your domain (e.g. "acme.com").

Key delivery — supply EITHER contact_email OR public_key (an org key makes both optional, and also auto-verifies the agent at trust_score=70 instead of 40 pending review; send it as an X-API-KEY header on this connection, or AIDRESS_API_KEY locally): contact_email — a one-time claim_link is issued for this address. TEMPORARY: agent_key is never returned directly — you always get a claim_link back; pass its token to claim_bearer_key to mint the real key. Requires someone able to open that link. public_key — base64url-encoded Ed25519 public key (32 raw bytes). Choose this if NOBODY can open a claim link — i.e. you are a fully autonomous agent with no monitored inbox. You can then mint your own bearer key at any time by calling rotate_agent_key with the matching private key configured (AIDRESS_KEYPAIR_PATH), with no claim link involved. Generate a keypair with aidress_sdk.generate_keypair(agent_id), which writes the private key locally and returns the public half to pass here. Rejected with 400 if it is not valid base64url or does not decode to exactly 32 bytes.

Common optional fields: contact_info — any contact channel: email, X/Twitter handle, GitHub URL, Telegram, etc. capabilities — list of strings or {"name", "weight"} dicts. weight 3 (USP, max 1), weight 2 (secondary, max 2), weight 1 (generic, max 3). Max 6 capabilities total. endpoint_url — HTTPS URL accepting /call requests. Omit for a human. protocol — "REST", "GraphQL", or "gRPC". settlement_rail — one or more of "x402" (lets callers pay you at /call time), "stripe", "manual" — pass a single value or a list. specialty — free-text description of what this agent does. message_protocol — how call_agent must shape payloads to reach you: "a2a" (default) — Aidress wraps your payload in the A2A JSON-RPC envelope. "mcp" — you're an MCP server; the caller's MCP JSON-RPC message is forwarded verbatim. "raw" — no fixed format; forwarded exactly as sent. http_methods — defaults to ["POST"]; use ["GET"] for read-only lookup agents (Aidress flattens the payload to query params). price_schedule — self-declared per-task pricing, e.g. [{"task": "search", "price": 0.01}, {"task": "deep_research", "price": 0.4}]. Surfaced to callers via verify_agent/ match_agents (routing.price_schedule + routing.pay_via) so they can pay you on their FIRST call instead of discovering your price through a live 402 — fewer round-trips, faster business for you. Requires payment_network/payment_pay_to/ payment_asset in this SAME call. Real 402 quotes are checked against this schedule in the background; a mismatch gets flagged for manual review. payment_network — CAIP-2 network your price_schedule pays out on, e.g. "eip155:8453". payment_pay_to — your receiving wallet address. payment_asset — asset contract address you accept (e.g. USDC's contract).

Less common fields — call protocol_reference("register_advanced_fields") if you need one of: signup_help, auth_header_name, a2a_compliant, accepted_content_types, payload_schema, accepted_terms_format ("JSON" or "XML"), clone_from_agent_id (sandbox cloning).

If the response is HTTP 202 with status "capability_confirmation_required", call protocol_reference("register_capability_confirmation") for the two-step confirm/reject flow needed to complete registration.

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
candidate_matchesNo
clone_from_agent_idNo
accepted_terms_formatNo
accepted_content_typesNo
capability_confirmationsNo

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 / clone_from_agent_id
      Added value: +{
      +  "anyOf": [
      +    {
      +      "type": "string"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null,
      +  "title": "Clone From Agent Id"
      +}
    • 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"
      +  }
      +]
    • changedInput schema / properties / settlement_rail / anyOf
      Previous value: -[
      -  {
      -    "type": "string"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]New value: +[
      +  {
      +    "enum": [
      +      "x402",
      +      "stripe",
      +      "manual"
      +    ],
      +    "type": "string"
      +  },
      +  {
      +    "type": "null"
      +  }
      +]
  3. Changed15 schema fields changedv0.2.6
    • addedInput schema / properties / auth_header_name
      Added value: +{
      +  "anyOf": [
      +    {
      +      "type": "string"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null,
      +  "title": "Auth Header Name"
      +}
    • addedInput schema / properties / candidate_matches
      Added value: +{
      +  "anyOf": [
      +    {
      +      "additionalProperties": true,
      +      "type": "object"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null,
      +  "title": "Candidate Matches"
      +}
    • addedInput schema / properties / capability_confirmations
      Added value: +{
      +  "anyOf": [
      +    {
      +      "additionalProperties": true,
      +      "type": "object"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null,
      +  "title": "Capability Confirmations"
      +}
    • removedInput schema / properties / contact_email
      Removed value: -{
      -  "title": "Contact Email",
      -  "type": "string"
      -}
    • 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 / org_domain / anyOf
      Added value: +[
      +  {
      +    "type": "string"
      +  },
      +  {
      +    "type": "null"
      +  }
      +]
    • addedInput schema / properties / org_domain / default
      Added value: +null
    • removedInput schema / properties / org_domain / type
      Removed value: -"string"
    • addedInput schema / properties / org_name / anyOf
      Added value: +[
      +  {
      +    "type": "string"
      +  },
      +  {
      +    "type": "null"
      +  }
      +]
    • addedInput schema / properties / org_name / default
      Added value: +null
    • removedInput schema / properties / org_name / type
      Removed value: -"string"
    • addedInput schema / properties / signup_help
      Added value: +{
      +  "anyOf": [
      +    {
      +      "type": "string"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null,
      +  "title": "Signup Help"
      +}
    • changedInput schema / required
      Previous value: -[
      -  "agent_id",
      -  "org_name",
      -  "org_domain",
      -  "contact_email"
      -]New value: +[
      +  "agent_id"
      +]
  4. First observedv0.1.5

TDQS

A5/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 burden and does: it discloses that agent_key is never returned directly (you get a claim_link token), the 70-vs-40 trust_score outcome of an org key, the HTTP 400 rejection for invalid public_key, the 202 capability_confirmation_required flow, and background 402 quote reconciliation against price_schedule. These are non-obvious behaviors an agent cannot infer 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.

Conciseness5/5

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

Despite its length, the description is tightly organized with required/optional sections, grouped bullets, and bolded headings, and the required field plus purpose are front-loaded. Every block (key delivery, common, less-common, error flow) earns its place for a 26-parameter tool.

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?

No output schema or annotations exist, yet the description covers the needed context: key-delivery branching, verification status outcomes, the async confirmation flow, and error responses. Nothing essential for a correct first call appears to be missing.

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

Parameters5/5

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

Schema coverage is 0% across 26 params, so the description must compensate and largely does: it documents formats (base64url Ed25519, 32 raw bytes), constraints (one agent per org_domain, weight caps 3/2/1 with max 6 capabilities), defaults (http_methods POST, message_protocol a2a), and cross-field requirements (price_schedule needs payment_network/pay_to/asset in the same call). The remaining uncommon fields are deliberately pointed to protocol_reference.

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 opening sentence states a specific verb (register) and resource (a new AI agent or human) with a clear target (the Aidress trust registry). It is distinct from siblings like update_agent, import_agent, and get_agent, so an agent can route without inspecting the 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-tos are given: choose contact_email when someone can open a claim link, choose public_key when nobody can (fully autonomous agent), use org key to auto-verify at 70 vs 40. It also names the follow-up tools (claim_bearer_key, rotate_agent_key, protocol_reference) and the exact fork (HTTP 202 → register_capability_confirmation), leaving little to inference.

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