Skip to main content
Glama

Mint or get a canonical object identity

emem_entity
Idempotent

Mint or return a shared identity for a real-world object so every agent resolves the same entity. Provide label plus place, cell, or lat/lng; returns an entity_token and signed receipt.

Instructions

Give a real-world object (a bridge, a farm plot, a river, a named place) one shared identity. Every agent resolves this identity the same way. The result is an entity_token (emem:entity:<entity_cid>) and a signed receipt that shows how the reference resolved. Two agents that name the same object get the SAME entity_cid. A stable external id (Overture GERS or OSM) decides identity when the responder knows one, so different labels for one object collapse to one id. This stops referential drift: 'the damaged bridge near the river' becomes one thing that every model reasons about.

When to use: Call this when a conversation refers to a THING and you need a handle that travels between agents. Anchor it with place, cell or lat+lng. Give the emem:entity: token to a peer, and the peer gets the same object. Recall at its cell64 to read signed facts. Choose the correct sibling: this tool MINTS or returns an identity. emem_entity_resolve finds an identity that an agent registered before, from a fuzzy phrase. emem_entity_link records that two names mean one object. Do not use it for an observation (use emem_recall or emem_memory_token) or for a place (use emem_locate). An entity is a thing AT a place.

Example arguments: {"label":"Golden Gate Bridge","kind":"bridge","place":"Golden Gate Bridge, San Francisco"}

Input Schema

NameRequiredDescriptionDefault
latNoLatitude anchoring the object to a place, paired with lng. The identity is hashed from this anchor, so two agents anchoring the same object differently mint different entities.
lngNoLongitude, paired with lat.
cellNocell64 to anchor the object directly (no geocode).
kindNoObject class: bridge, river, farm_plot, building, admin_division, place, custom, ... Defaults to "place".
labelYesHuman name of the object, e.g. "Golden Gate Bridge", "the north dam". Required.
placeNoFree-text place to anchor the object (geocoded). Provide place OR cell OR lat+lng.
parentNoOptional parent entity_cid (containment).
attesterNoed25519 binding, verified. Omit it and the refusal's details.how_to_sign gives the digest to sign.
external_idsNoStable ids that drive convergence. Caller-supplied values win over geocoder-derived ones.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed1 schema field changedv2.4.4
    • addedInput schema / properties / attester
      Added value: +{
      +  "description": "ed25519 binding, verified. Omit it and the refusal's details.how_to_sign gives the digest to sign.",
      +  "properties": {
      +    "pubkey_b32": {
      +      "type": "string"
      +    },
      +    "sig_b32": {
      +      "type": "string"
      +    }
      +  },
      +  "required": [
      +    "pubkey_b32",
      +    "sig_b32"
      +  ],
      +  "type": "object"
      +}
  2. Changed6 schema fields changedv1.3.3
    • addedInput schema / properties / lat / description
      Added value: +"Latitude anchoring the object to a place, paired with lng. The identity is hashed from this anchor, so two agents anchoring the same object differently mint different entities."
    • addedInput schema / properties / lat / maximum
      Added value: +90
    • addedInput schema / properties / lat / minimum
      Added value: +-90
    • addedInput schema / properties / lng / description
      Added value: +"Longitude, paired with lat."
    • addedInput schema / properties / lng / maximum
      Added value: +180
    • addedInput schema / properties / lng / minimum
      Added value: +-180
  3. First observedv0.1.0

TDQS

A4.7/5.0
Behavior5/5

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

Beyond the annotations (idempotentHint=true, destructiveHint=false, openWorldHint=true), the description discloses convergence semantics (two agents naming the same object get the SAME entity_cid; differing anchors mint different entities), external-id priority over geocoder-derived ids, and the auth path for the attester signature including what happens on refusal ('details.how_to_sign gives the digest to sign'). This is rich, non-obvious behavioral context that the structured fields do not carry.

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 core purpose and cleanly sectioned ('When to use', 'Example arguments'), so scanning is easy. It is somewhat long and contains a mildly rhetorical sentence ('This stops referential drift...') that repeats the convergence point already made, but nothing is badly out of place.

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 9-parameter, nested-object tool with no output schema, the description covers what is returned (token + signed receipt), how identity resolves, and the auth/signing flow, which is the important gap-filling. The one required param and the `parent` containment param are left to the schema, but overall the agent has enough to invoke it correctly.

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 description coverage is 100%, so the baseline is 3 and the schema already documents each field. The description still adds real meaning: the OR-relationship between `place`/`cell`/`lat`+`lng` anchors, the rule that external ids drive convergence and caller values win, and worked example arguments. It stops short of fully compensating on subtler params like `parent`.

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+resource ('Give a real-world object one shared identity') and names the concrete outputs (an `entity_token` of the form `emem:entity:<entity_cid>` and a signed receipt). It explicitly separates itself from siblings emem_entity_resolve, emem_entity_link, emem_recall, emem_memory_token and emem_locate, so an agent can route without opening any 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?

Has an explicit 'When to use' section with the trigger condition (a conversation refers to a THING and you need a handle that travels between agents) and the anchoring requirement. It names each relevant alternative with the condition that selects it ('emem_entity_resolve finds an identity that an agent registered before, from a fuzzy phrase') and gives explicit exclusions ('Do not use it for an observation... or for a place').

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