Skip to main content
Glama

Query Shared Objects

horizon_query_shared_objects
Read-onlyIdempotent

Reads one bounded, metadata-selected page of shared world-map or async-PvP objects using query filters and cursors, enabling targeted inspection without background polling or automatic page traversal.

Instructions

Reads one bounded metadata-selected object page. Use when: explicit world-map/async-PvP object access after reading horizon://docs/shared-objects. Not for: background polling, automatic page traversal, interpreting opaque bytes or using this as a combat validator. Requires: userId and the player's session: sign in with horizon_signin_email or horizon_signin_anonymous and pass its accessToken as sessionToken. Side effects: Read only POST. At most 256 candidates, 50 objects and 1 MiB decoded bytes. Empty page with cursor is valid. Random is nonuniform, at most two indexed ranges. Returns: {objects,nextCursor,pollAfterSeconds,serverTime}; explicit next-cursor may proceed immediately, refresh honors interval. Errors: 409 revision/state/permission conflict or lost response: explicitly reread owned objects/usage and reconcile original intent, never automatically retry with newer revisions or a replacement ID. 404 does not distinguish missing/private/expired data. 422 retains existing data on quota/archive failure. 401 means the session is missing or expired: sign in again and retry with the new accessToken. 403 for a session means the token belongs to another user: pass the userId that signed in. Needs HORIZON_API_KEY. Every failure returns an error result (isError) with the HTTP status and body: a 401 that horizon_test_connection also returns means HORIZON_API_KEY is wrong, 429 means the account's per-minute rate limit was reached (wait a minute, then retry).

Input Schema

NameRequiredDescriptionDefault
queryYesExplicit bounded query and original cursor; one permission partition only
userIdYesActive player UUID matching the authenticated session and project
collectionYesPermanent collection or configured field key, lowercase ASCII
sessionTokenYesPlayer accessToken, sent only as Bearer

Schema Changelog

Changes observed during successful MCP inspections.

  1. Addedv1.9.1

TDQS

A4.5/5.0
Behavior5/5

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

Goes well beyond the annotations: it discloses the read-only-but-POST nature, hard bounds (256 candidates, 50 objects, 1 MiB decoded), that an empty page with a cursor is valid, the nonuniform random sampling limit, the returned field set, and detailed per-status error semantics including a strict no-auto-retry-on-409 rule. Annotations say read-only/idempotent/non-destructive, and nothing conflicts with that.

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?

Labeled sections (Use when / Not for / Requires / Side effects / Returns / Errors) make it scannable and the most decision-relevant info is front-loaded. It is long and the errors paragraph is dense, but nearly every clause carries operational meaning.

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 exists, yet the description names the return fields, bounds and pagination contract, and it documents auth prerequisites, quota/archive failure behavior, and the full error taxonomy. For a nested-query, auth-gated read tool this covers everything needed to call 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 coverage is 100%, so the baseline is 3; the description earns above that by explaining cursor semantics (an explicit next-cursor may be used immediately whereas a refresh must honor pollAfterSeconds) and random-mode sampling behavior, which the schema does not clarify. It still leaves the five query.mode values and the min/max/equal/rectangle fields to the schema.

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?

States a specific verb and resource: reads a single bounded page of shared objects selected by a metadata query. It is distinguishable from the single-object sibling (horizon_get_shared_object) and the mutation siblings (create/update/delete_shared_object), though it never names them explicitly and 'metadata-selected' is somewhat jargon-heavy.

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 'Use when' condition (explicit world-map / async-PvP object access after reading the shared-objects doc) and an explicit 'Not for' list that excludes background polling, automatic page traversal, opaque-byte interpretation, and use as a combat validator. Alternatives and anti-patterns are both named.

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