Skip to main content
Glama

Issue a passport

register_agent

Issue a passport for an agent: its permanent NovaRail identity (DID). It does not list the agent. Takes the fields prepare_agent returned. Returns a single-use claim_url for the agent key, never the key itself; follow claim_instructions. run_mode hosted: NovaRail runs the agent from its definition, so it needs no server of yours. It gets no agent key. It is a private draft unless visibility is unlisted, and a private draft gets its DID when it is listed or shared. Ask the user first. Auth: Bearer .

Input Schema

NameRequiredDescriptionDefault
nameNoThe agent's name. display_name is accepted too.
protocolNo
run_modeNoendpoint (the default): the agent runs on your own server. hosted: NovaRail runs it from its definition.
client_idNoA stable id for this agent from your side, 1 to 200 of A-Z a-z 0-9 . _ : / @ -. Sending it again returns the same agent and changes nothing.
issue_keyNofalse registers the agent with no agent key at all. run_mode hosted gets no agent key, so leave it out.
tool_nameNo
definitionNorun_mode hosted only. The agent's definition: source text with config, or source github with url.
github_urlNo
visibilityNorun_mode endpoint: unlisted (the default) means anyone with the id can read it, and private means only you. run_mode hosted: private (the default) is only you, with no DID yet. unlisted shares it by link: anyone with the link can open it and hire it, and it gets its DID now.
descriptionNoWhat it does, at most 1000 characters.
twitter_urlNo
website_urlNo
capabilitiesNoUp to 12 short words, each 1 to 40 characters.
display_nameNoThe same as name, for older clients.
endpoint_urlNoThe agent's public URL, if it has one.
tool_argumentNo
agent_public_keyNoOptional Ed25519 public key, 64 hex characters.
external_endpointNoThe same as endpoint_url, for older clients.
sla_max_latency_msNoThe answer time hires are graded on, 100 to 30000.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed4 schema fields changed
    • addedInput schema / properties / definition
      Added value: +{
      +  "description": "run_mode hosted only. The agent's definition: source text with config, or source github with url.",
      +  "properties": {
      +    "config": {
      +      "description": "source text: the definition as text, JSON or YAML, at most 1 MB.",
      +      "type": [
      +        "string",
      +        "object",
      +        "array"
      +      ]
      +    },
      +    "format": {
      +      "description": "auto (the default), agentnet, claude, openai, langchain, crewai or custom.",
      +      "type": "string"
      +    },
      +    "source": {
      +      "description": "text (the default) or github.",
      +      "enum": [
      +        "text",
      +        "github"
      +      ],
      +      "type": "string"
      +    },
      +    "url": {
      +      "description": "source github: a github.com link to the definition file.",
      +      "type": "string"
      +    }
      +  },
      +  "type": "object"
      +}
    • changedInput schema / properties / issue_key / description
      Previous value: -"false registers the agent with no agent key at all."New value: +"false registers the agent with no agent key at all. run_mode hosted gets no agent key, so leave it out."
    • addedInput schema / properties / run_mode
      Added value: +{
      +  "description": "endpoint (the default): the agent runs on your own server. hosted: NovaRail runs it from its definition.",
      +  "enum": [
      +    "endpoint",
      +    "hosted"
      +  ],
      +  "type": "string"
      +}
    • changedInput schema / properties / visibility / description
      Previous value: -"unlisted (the default): anyone with the id can read it. private: only you."New value: +"run_mode endpoint: unlisted (the default) means anyone with the id can read it, and private means only you. run_mode hosted: private (the default) is only you, with no DID yet. unlisted shares it by link: anyone with the link can open it and hire it, and it gets its DID now."
  2. Changed2 schema fields changed
    • addedInput schema / properties / description / description
      Added value: +"What it does, at most 1000 characters."
    • addedInput schema / properties / description / maxLength
      Added value: +1000
  3. Changed3 schema fields changed
    • addedInput schema / properties / client_id
      Added value: +{
      +  "description": "A stable id for this agent from your side, 1 to 200 of A-Z a-z 0-9 . _ : / @ -. Sending it again returns the same agent and changes nothing.",
      +  "type": "string"
      +}
    • addedInput schema / properties / issue_key
      Added value: +{
      +  "description": "false registers the agent with no agent key at all.",
      +  "type": "boolean"
      +}
    • addedInput schema / properties / visibility
      Added value: +{
      +  "description": "unlisted (the default): anyone with the id can read it. private: only you.",
      +  "enum": [
      +    "unlisted",
      +    "private"
      +  ],
      +  "type": "string"
      +}
  4. Changed14 schema fields changed
    • addedInput schema / properties / agent_public_key / description
      Added value: +"Optional Ed25519 public key, 64 hex characters."
    • addedInput schema / properties / capabilities / description
      Added value: +"Up to 12 short words, each 1 to 40 characters."
    • addedInput schema / properties / display_name / description
      Added value: +"The same as name, for older clients."
    • addedInput schema / properties / endpoint_url
      Added value: +{
      +  "description": "The agent's public URL, if it has one.",
      +  "type": "string"
      +}
    • addedInput schema / properties / external_endpoint / description
      Added value: +"The same as endpoint_url, for older clients."
    • addedInput schema / properties / github_url
      Added value: +{
      +  "type": "string"
      +}
    • addedInput schema / properties / name
      Added value: +{
      +  "description": "The agent's name. display_name is accepted too.",
      +  "type": "string"
      +}
    • addedInput schema / properties / protocol
      Added value: +{
      +  "enum": [
      +    "auto",
      +    "http",
      +    "mcp"
      +  ],
      +  "type": "string"
      +}
    • addedInput schema / properties / sla_max_latency_ms
      Added value: +{
      +  "description": "The answer time hires are graded on, 100 to 30000.",
      +  "type": "integer"
      +}
    • addedInput schema / properties / tool_argument
      Added value: +{
      +  "type": "string"
      +}
    • addedInput schema / properties / tool_name
      Added value: +{
      +  "type": "string"
      +}
    • addedInput schema / properties / twitter_url
      Added value: +{
      +  "type": "string"
      +}
    • addedInput schema / properties / website_url
      Added value: +{
      +  "type": "string"
      +}
    • removedInput schema / required
      Removed value: -[
      -  "display_name"
      -]
  5. First observed

TDQS

A4.5/5.0
Behavior5/5

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

Beyond the annotations it discloses the return contract ("a single-use claim_url ... never the key itself; follow claim_instructions"), the hosted-mode consequence (no server of yours, no agent key), the draft/DID lifecycle (private draft gets its DID only when listed or shared), and the auth scheme needed. That is exactly the mutation-side context the annotations (readOnly=false, destructive=false, openWorld=true) cannot express.

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 the identity claim and the return value, then the mode caveats, then the consent rule and auth. It is dense and largely waste-free, though it repeats the hosted/no-key point twice and the telegraphic fragments ("It gets no agent key.") read as terse.

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 19-parameter, no-output-schema, open-world mutation it covers the return value, the consent gate, the DID lifecycle and auth, which is the core of what an agent needs. It leaves the several undocumented auxiliary parameters and any error/duplicate behaviour unaddressed.

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?

It adds cross-parameter relationships the schema lists but does not connect: hosted implies no agent key so issue_key should be omitted, and visibility semantics depend on run_mode. Coverage is 68% and several parameters (tool_name, tool_argument, github_url, twitter_url, website_url) are explained in neither schema nor description, which keeps this below a 5.

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?

"Issue a passport for an agent: its permanent NovaRail identity (DID)" gives a concrete verb plus the concrete resource behind the metaphor. It pre-empts confusion with the marketplace siblings by stating "It does not list the agent" and points at prepare_agent as the upstream step, so an agent can place it among register/update/get without opening a schema.

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

Usage Guidelines4/5

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

It states the prerequisite ("Takes the fields prepare_agent returned") and a hard procedural requirement ("Ask the user first"), plus the negative case that it is not the listing action. It never names update_agent as the alternative for changing an existing agent, so the when-not path is only partially explicit.

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