Skip to main content
Glama
@proof-holdings/mcp-server

@proof-holdings/mcp-server

Official

get_asset

Read-only

Retrieve verified asset details by ID to access its type, value, status, and verification timestamps.

Instructions

Get a single verified asset by ID. Returns details including type, value, status, and verification timestamps.

ACCESS: needs a Proof account. Set PROOF_API_KEY and restart this server, then call this tool again. start_login does NOT open this tool.

Input Schema

NameRequiredDescriptionDefault
idYesAsset ID

Output Schema

NameRequiredDescriptionDefault
idYesMongoDB ObjectId
typeYesType of asset being verified. Not yet available — no channel of theirs can be completed, so a create or start answers 400 `channel_not_available`: social, wallet, account.
statusYesStatus of a verified asset
channelYesHow the asset was verified: a verification channel, or `otp` / `magic_link` for an email address confirmed from the dashboard
metadataNoChannel-specific details recorded at verification
proof_idNoPublic handle of the proof backing this asset (`ph_ctl_<32 hex>`), or null when the asset predates the proof registry. This is the `control_proof` value `POST /api/v1/delegations` takes.
has_proofNoWhether a proof token is stored for this asset. Sent by the point read (`GET /me/assets/{id}`) only.
created_atYes
identifierYes
proof_tokenNoThe stored signed proof token. Returned by the point read (`GET /me/assets/{id}`) to a JWT owner session ONLY — an API-key caller and the list response carry `has_proof` alone.
verified_atNo
proof_statusNoRegistry status of that proof. Only an `active` proof can anchor a delegation.
proof_expires_atYesWhen the proof backing this asset expires

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed2 schema fields changedv1.7.2
    • removedInput schema / additionalProperties
      Removed value: -false
    • changedOutput schema / (root)
      Previous value: -nullNew value: +{
      +  "$schema": "http://json-schema.org/draft-07/schema#",
      +  "additionalProperties": {},
      +  "description": "User verified asset",
      +  "properties": {
      +    "channel": {
      +      "description": "How the asset was verified: a verification channel, or `otp` / `magic_link` for an email address confirmed from the dashboard",
      +      "type": "string"
      +    },
      +    "created_at": {
      +      "type": "string"
      +    },
      +    "has_proof": {
      +      "description": "Whether a proof token is stored for this asset. Sent by the point read (`GET /me/assets/{id}`) only.",
      +      "type": "boolean"
      +    },
      +    "id": {
      +      "description": "MongoDB ObjectId",
      +      "type": "string"
      +    },
      +    "identifier": {
      +      "type": "string"
      +    },
      +    "metadata": {
      +      "additionalProperties": {},
      +      "description": "Channel-specific details recorded at verification",
      +      "properties": {},
      +      "type": "object"
      +    },
      +    "proof_expires_at": {
      +      "description": "When the proof backing this asset expires",
      +      "type": "string"
      +    },
      +    "proof_id": {
      +      "description": "Public handle of the proof backing this asset (`ph_ctl_<32 hex>`), or null when the asset predates the proof registry. This is the `control_proof` value `POST /api/v1/delegations` takes.",
      +      "type": [
      +        "string",
      +        "null"
      +      ]
      +    },
      +    "proof_status": {
      +      "description": "Registry status of that proof. Only an `active` proof can anchor a delegation.",
      +      "type": [
      +        "string",
      +        "null"
      +      ]
      +    },
      +    "proof_token": {
      +      "description": "The stored signed proof token. Returned by the point read (`GET /me/assets/{id}`) to a JWT owner session ONLY — an API-key caller and the list response carry `has_proof` alone.",
      +      "type": [
      +        "string",
      +        "null"
      +      ]
      +    },
      +    "status": {
      +      "description": "Status of a verified asset",
      +      "type": "string"
      +    },
      +    "type": {
      +      "description": "Type of asset being verified. Not yet available — no channel of theirs can be completed, so a create or start answers 400 `channel_not_available`: social, wallet, account.",
      +      "type": "string"
      +    },
      +    "verified_at": {
      +      "type": "string"
      +    }
      +  },
      +  "required": [
      +    "id",
      +    "type",
      +    "channel",
      +    "identifier",
      +    "status",
      +    "proof_expires_at",
      +    "created_at"
      +  ],
      +  "type": "object"
      +}
  2. First observedv1.1.0

TDQS

A3.7/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, so safety is covered by structured data. The description adds genuinely new behavior: the authentication prerequisite, the restart requirement, and the fact that start_login is not a path to access this tool — context an agent could not get from the schema or annotations.

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?

Two tight blocks: the purpose and return fields first, then a clearly separated ACCESS section. No filler sentences; the access note earns its space because it prevents a failed call.

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 one-parameter read tool with an output schema and readOnlyHint annotation, the description covers purpose, return shape at a high level, and access preconditions. The only gap is sibling differentiation against list_assets, which is minor given the tool's simplicity.

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?

With a single parameter at 100% schema description coverage, the schema already defines 'id' as the asset ID. The description adds only the qualifier that the asset is 'verified' and is looked up 'by ID', which is marginal meaning beyond the schema — baseline 3 applies.

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 states a specific verb and resource ('Get a single verified asset by ID') and names the returned fields (type, value, status, verification timestamps). 'Single' implicitly contrasts with the sibling list_assets, though that sibling is never named explicitly.

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?

There is real guidance in the ACCESS block: it states the tool requires a Proof account with PROOF_API_KEY set, and explicitly warns that start_login does NOT open this tool, which prevents a common misrouting. However, it never says when to prefer this over list_assets or get_profile_assets for asset lookup, so alternative selection is left to inference.

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

Deploy Server

Other Tools