horizOn MCP Server
OfficialClick on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@horizOn MCP ServerCan you show me the Godot quickstart for cloud saves?"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
horizOn MCP Server
MCP server for horizOn Backend-as-a-Service -- gives AI coding assistants documentation, live API tools, and workflow prompts for game and app development.
Quick Install
Add to your MCP client configuration (Claude Desktop, Cursor, etc.):
{
"mcpServers": {
"horizOn": {
"command": "npx",
"args": ["-y", "horizon-mcp"],
"env": {
"HORIZON_API_KEY": "your-api-key-here"
}
}
}
}Related MCP server: Godot MCP Unified
Features
Resources (16 docs)
Documentation resources are served directly from the MCP server. No API key required.
URI | Description |
| What is horizOn, core concepts (Account vs User), features, tier system, API structure, and SDKs |
| Authentication methods (Anonymous, Email, Google), endpoints, SDK code examples, and common errors |
| Leaderboard score submission, top entries, user rank, entries around user, with SDK examples |
| Cloud save/load for JSON and binary data, tier size limits, SDK examples |
| Server-side key-value configuration: feature flags, game balance, A/B testing. SDK examples |
| Server-side localized strings across 15 languages: per-key translations, single/all fetch, available languages. SDK examples |
| In-game news and announcements with language filtering. SDK examples |
| Gift code validation and redemption for promotional rewards. SDK examples |
| Bug reports, feature requests, and general feedback submission. SDK examples |
| Server-side event and error tracking. Requires BASIC tier or higher. SDK examples |
| Crash report submission, session tracking, fingerprinting, breadcrumbs, and auto-regression detection. SDK examples |
| Transactional and event-based email delivery to registered users. Templates, scheduling, status tracking, and SMTP integration. SDK examples |
| Complete API reference for all horizOn App API endpoints with request/response schemas |
| Step-by-step guide to integrate horizOn in Godot with GDScript examples |
| Step-by-step guide to integrate horizOn in Unity with C# examples |
| Step-by-step guide to integrate horizOn in Unreal Engine 5.5+ with the official horizOn SDK plugin. C++ and Blueprint examples |
Tools (28 tools)
Live API tools that call the horizOn backend. Requires a valid API key.
Tool | Description |
| Test connection to the horizOn API (health check) |
| Create a new anonymous user account |
| Create a new user account with email and password |
| Sign in with email and password |
| Sign in with an anonymous token |
| Check whether a user session is still valid |
| List available leaderboard boards for multi-board calls |
| Submit a score to the leaderboard |
| Get the top leaderboard entries, optionally by board key |
| Get a user's leaderboard rank, optionally by board key |
| Get leaderboard entries around a user's position, optionally by board key |
| Save cloud data for a user |
| Load cloud save data for a user |
| Get a single remote config value by key |
| Get all remote config values |
| Get a single localized string by key, optionally for a specific language |
| Get all localized strings, optionally for a specific language |
| List the languages that have localizations for the app |
| Get news articles with optional language filtering |
| Validate a gift code without redeeming it |
| Redeem a gift code for a user |
| Submit user feedback (bug reports, feature requests) |
| Create a server-side log entry (INFO, WARN, ERROR) |
| Submit a crash report (grouped by fingerprint, with regression detection) |
| Register a game session for the crash-free rate |
| Send a transactional email to a registered user from a template |
| Cancel a pending or scheduled email |
| Get the status of a sent or scheduled email |
Prompts (4 prompts)
Workflow prompts that guide AI assistants through common horizOn tasks.
Prompt | Description |
| Generate integration code for a specific horizOn feature in your game engine |
| Step-by-step guide to set up horizOn authentication in your project |
| Diagnose and fix horizOn connection issues |
| Get a detailed explanation of any horizOn feature |
Configuration
Variable | Required | Description |
| Yes (for tools) | Your horizOn API key. Get one at horizon.pm |
| No | API base URL. Defaults to |
Resources (documentation) work without an API key. Only the live API tools require authentication.
Admin Tools (v1.2+)
With an Account Key (creatable in your horizOn Dashboard -> API Keys -> Create -> Account Key), the MCP server exposes additional tools that let Claude manage your dashboard -- projects, remote config, news, email templates, gift codes, users, leaderboards, cloud-save data, crash reports, feedback, user logs, and SMTP.
How to get your Account Key
Log in to your horizOn Dashboard
Navigate to API Keys in the sidebar
Click Create API Key
Select Account Key as the key type
Choose whether the key can access the entire account, a single Project API Key, or selected feature groups
Click Create -- your key will be shown once. Copy it immediately.
Add the key to your MCP configuration (see Setup below)
Setup
Add both keys to your MCP client configuration:
{
"mcpServers": {
"horizOn": {
"command": "npx",
"args": ["-y", "horizon-mcp"],
"env": {
"HORIZON_API_KEY": "your-project-key (for player-facing tools)",
"HORIZON_ACCOUNT_API_KEY": "your-account-key (for dashboard tools)"
}
}
}
}Both can be set together or individually. Admin tools only register when the account key is set -- otherwise the server exposes only the original player-facing tools.
Scope
Account Keys inherit your account's tier (FREE/BASIC/PRO/ENTERPRISE) -- they grant no extra privileges. A key can be full-account, limited to a single Project API Key, limited to selected feature groups, or both. Platform-admin-only endpoints (Blog, Banner, System-Config) are automatically unreachable. A handful of ultra-sensitive endpoints (account deletion, credentials change, key management itself, subscription cancel) require a dashboard session and cannot be called via an Account Key.
When a key is project-scoped, the backend enforces that scope on direct HTTP calls too. Account-wide endpoints or ID-only endpoints that cannot prove project context are rejected for project-scoped keys.
Tool Groups
Prefix | Description |
| Project API key management (create/update/regenerate/revoke/delete) |
| Remote config CRUD |
| Multilingual news (titles/messages as |
| Multilingual email templates with variables |
| Gift code CRUD + revoke |
| User management + statistics (no full-list needed) |
| Leaderboard entries + statistics |
| Cloud save data + statistics |
| Crash groups, reports, statistics |
| Read user feedback |
| Read user logs |
| Account SMTP configuration (password always returned masked) |
What is horizOn?
horizOn is a multi-tenant Backend-as-a-Service platform built for game and app developers. It provides a managed backend so developers can focus on building their game or app instead of server infrastructure.
Core features:
Authentication (Anonymous, Email, Google, Apple)
Leaderboards
Cloud Save
Remote Config
Localization
News and Announcements
Gift Codes
User Feedback
User Logs
Crash Reporting
Email Sending
Learn more at horizon.pm. Install this MCP server via npm.
Supported Engines
Godot 4.5+ -- GDScript SDK
Unity 6 -- C# SDK
Unreal Engine 5.5+ -- C++ and Blueprint SDK
Development
# Clone the repository
git clone https://github.com/ProjectMakersDE/horizOn-mcp.git
cd horizOn-mcp
# Install dependencies
npm install
# Start the server (development mode)
npm run dev
# Build for production
npm run build
# Run tests
npm testLicense
MIT
Available Tools
28 toolshorizon_cancel_emailCancel EmailA
Cancels a pending or scheduled email. Only emails with status 'pending' can be cancelled. The email must belong to the same API key.
| Name | Required | Description | Default |
|---|---|---|---|
| emailId | Yes | ID of the email to cancel (returned by send_email) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does disclose two useful constraints: the pending-status requirement and the same-API-key ownership rule. It omits other behavioral traits such as whether cancellation is reversible, what status the email ends in, or what errors surface on failure.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences, front-loaded with the action and immediately followed by the two gating conditions. No filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter cancellation tool with no annotations or output schema, the description supplies the essential preconditions an agent needs to invoke it correctly. It would be stronger with a note on post-cancellation state, but nothing critical is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and the single emailId parameter is fully documented in the schema, including its UUID format and that it comes from send_email. The description adds nothing beyond that, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Cancels a pending or scheduled email') that clearly separates it from siblings like send_email and get_email_status. It does not explicitly name those siblings, but the action is unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides the key precondition that the email must have status 'pending', which tells the agent when this call will succeed. It gives no guidance on when to prefer this over alternatives or how to handle non-pending emails (e.g., reschedule instead).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
horizon_check_authCheck AuthenticationC
Checks whether a user session is still valid on horizOn.
| Name | Required | Description | Default |
|---|---|---|---|
| userId | Yes | User ID (UUID) | |
| sessionToken | Yes | Session token (max 256 characters) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden. It implies a read-only check but never states whether the session token is consumed, whether a failed check requires re-authentication, or how the result is signaled. For an auth tool with zero annotation coverage this is a meaningful gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single efficient sentence with no waste and the key scope front-loaded. It is arguably too terse for an auth tool, but there is no padding or redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no annotations and no output schema, the description must explain what a positive versus negative check returns and what the agent should do on failure. It supplies none of this, leaving the caller unable to interpret results or recover from an invalid session.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%: userId (UUID) and sessionToken (max 256 chars) are both fully documented in the schema, so the description adds no parameter meaning. Baseline 3 applies when the schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('checks') and resource ('user session validity') on the named platform. It is clearly distinct from the signin/signup siblings, which establish sessions rather than verify them, though it does not name those siblings explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to call this versus the signin/signup/refresh siblings, nor any prerequisite context (e.g. call before operations that require a valid session). The agent must infer usage entirely.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
horizon_create_crash_reportCreate Crash ReportB
Submits a crash report to horizOn. Crashes are grouped by fingerprint, with automatic regression detection when a resolved group receives new crashes.
| Name | Required | Description | Default |
|---|---|---|---|
| os | Yes | OS details (e.g. 'Android 14', 'iOS 17.2') | |
| type | Yes | Crash type: CRASH (fatal), NON_FATAL (exception), or ANR (Application Not Responding) | |
| userId | No | User ID (UUID) who experienced the crash | |
| message | Yes | Error message (1-5000 characters) | |
| platform | Yes | Platform (e.g. 'Android', 'iOS', 'Windows') | |
| sessionId | Yes | Session ID from horizon_create_crash_session | |
| appVersion | Yes | App version (e.g. '1.2.3') | |
| customKeys | No | Key-value metadata (max 10 entries) | |
| sdkVersion | Yes | horizOn SDK version | |
| stackTrace | No | Full stack trace (max 20000 characters) | |
| breadcrumbs | No | Activity trail before the crash (max 50 items) | |
| deviceModel | Yes | Device model (e.g. 'Pixel 8', 'iPhone 15') | |
| fingerprint | Yes | Grouping key — crashes with the same fingerprint are grouped together (1-128 characters) | |
| deviceMemoryMb | No | Device RAM in MB |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden, and it does disclose two genuine behavioral traits not in the schema: fingerprint-based grouping and automatic regression detection on resolved groups. However, it omits auth requirements, idempotency/dedupe behavior, and what a submission returns, which matter for a 14-param write tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tight sentences with no filler, and the core action is front-loaded before the secondary grouping detail.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
A mutation tool with 14 parameters, no annotations, and no output schema needs more than two sentences. Missing prerequisite ordering, auth assumptions, and post-submit behavior leave gaps an agent cannot fill from structured fields alone.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the schema already documents all 14 parameters thoroughly, including the enum and nested breadcrumbs/customKeys constraints. The description adds no parameter-level meaning beyond that, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Submits a crash report to horizOn') and adds scope via the fingerprint-grouping sentence. It does not explicitly distinguish itself from nearby siblings like horizon_create_log or horizon_create_crash_session, which the sessionId param implies is a prerequisite.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No when-to-use, when-not-to-use, or prerequisite guidance appears in the description. The dependency on horizon_create_crash_session exists only in the schema's sessionId description, not in the tool description itself.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
horizon_create_crash_sessionCreate Crash SessionA
Registers a game session for crash-free rate calculation. Call this at app start. If the session later has a crash report, it is marked automatically.
| Name | Required | Description | Default |
|---|---|---|---|
| userId | No | User ID (UUID) starting the session | |
| platform | Yes | Platform (e.g. 'Android', 'iOS', 'Windows') | |
| sessionId | Yes | Unique session identifier (1-100 characters) | |
| appVersion | Yes | App version (e.g. '1.2.3') |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden. It usefully discloses the automatic crash-marking behavior, but says nothing about idempotency (calling twice with the same sessionId), auth requirements, rate limits, or what the call returns — meaningful gaps for a write operation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three tight sentences with zero waste: purpose first, then timing, then lifecycle behavior. Every sentence earns its place and the most important information is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a low-complexity session-registration call with no output schema or annotations, the description covers purpose, timing, and post-hoc behavior adequately. It could be more complete by stating auth needs or return behavior, but nothing essential to invoking it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all four parameters (userId, platform, sessionId, appVersion) are already documented in the schema. The description adds no format, constraint, or example detail beyond what the schema provides, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ('Registers a game session') and the goal ('for crash-free rate calculation'), so the agent knows exactly what the tool does. It does not explicitly contrast with the sibling horizon_create_crash_report, so the differentiation is left to inference rather than stated.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides a clear when-to-use trigger ('Call this at app start') and clarifies the downstream lifecycle ('if the session later has a crash report, it is marked automatically'). It stops short of naming alternatives or exclusion conditions, but the timing guidance is unambiguous.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
horizon_create_logCreate LogC
Creates a user log entry on horizOn with a message, type (INFO/WARN/ERROR), and optional error code.
| Name | Required | Description | Default |
|---|---|---|---|
| type | Yes | Log level: INFO, WARN, or ERROR | |
| userId | Yes | User ID (UUID) | |
| message | Yes | Log message (max 1000 characters) | |
| errorCode | No | Error code (max 50 characters) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It does not say whether authentication is required, whether logs are retained/immutable, or what happens if errorCode is omitted for an ERROR-level entry. Only the mutation intent is conveyed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence covering the resource and the salient fields, with no wasted words. It is appropriately sized, though it could have spent a clause on routing or auth.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a mutation tool with no annotations and no output schema, the description omits the behavioral context an agent needs: auth requirements, success/return behavior, and the relationship between type=ERROR and errorCode. Parameters are covered by the schema, but the operation's semantics are thin.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the enum values, UUID format, and max lengths are all documented in the schema. The description only restates the same fields and adds no format or coupling constraints, so the baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (Creates) and resource (user log entry on horizOn) and enumerates the key fields. It is clearly distinguishable from unrelated siblings like horizon_submit_score, though it does not explicitly contrast with the nearby horizon_create_crash_report.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this log tool versus siblings such as horizon_create_crash_report or horizon_submit_feedback, and no note on prerequisites (e.g., an authenticated userId). Usage must be inferred entirely from the name.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
horizon_get_all_localizationsGet All LocalizationsB
Gets all localized strings from horizOn, optionally for a specific language.
| Name | Required | Description | Default |
|---|---|---|---|
| lang | No | ISO 639-1 language code (2 characters). One of: en, de, es, fr, it, pt, nl, pl, ru, ja, zh, ar, ko, tr, id. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the disclosure burden. It usefully clarifies the default behavior (returns all strings unless a language is given), but says nothing about auth requirements, rate limits, or return shape. Adequate for a plain read getter, but thin given the absence of annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with no wasted words. It is appropriately sized, though minimal enough that it borders on under-specification rather than exemplifying rich conciseness.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no annotations and no output schema, the description is the only behavioral source, yet it does not describe the returned structure or volume. For a simple getter with one fully-documented optional param this is minimally sufficient, but not complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the lang parameter is fully documented in-schema with its enum of ISO codes, so the schema does the heavy lifting. The description only confirms that the filter is optional, adding marginal value beyond the structured field.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (Gets) and resource (all localized strings), and the 'all' plus optional language qualifier signals scope. It does not name the sibling horizon_get_localization/horizon_get_localization_languages, leaving the distinction (all vs. one string) to inference.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
'optionally for a specific language' implies when the lang parameter applies, but there is no explicit guidance on when to prefer this over horizon_get_localization or horizon_get_localization_languages, and no prerequisites or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
horizon_get_all_remote_configsGet All Remote ConfigsB
Gets all remote configuration values from horizOn.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden, and it discloses almost nothing: no auth requirements, no indication of whether results are cached or how large the payload is, and no return shape. Only the read-only nature is implied by 'Gets'.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single efficient sentence with the verb and scope front-loaded; nothing is padded. Minor blemish: the inconsistent capitalization 'horizOn'.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-arg, no-annotation, no-output-schema tool, the description is the only documentation and it omits what the return actually looks like (key/value config map), whether auth is required, and what an empty result means. It is not sufficient for an agent to call and interpret this confidently.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so the baseline is 4; there is nothing for the description to disambiguate. It does not incorrectly imply any hidden arguments.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('Gets') and resource ('all remote configuration values'), and the word 'all' hints at the plural scope. However it never explicitly distinguishes itself from the sibling horizon_get_remote_config, so an agent must infer the difference from the name alone.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this versus horizon_get_remote_config (single-key fetch) or when config data is needed. No mention of authentication prerequisites, even though nearly all siblings are auth-related calls that likely must run first.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
horizon_get_email_statusGet Email StatusA
Gets the current status of a specific email (pending, processing, sent, or failed). Use this to check whether a sent or scheduled email has been delivered.
| Name | Required | Description | Default |
|---|---|---|---|
| emailId | Yes | ID of the email to check (returned by send_email) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden. It usefully enumerates the status values the tool can return, but says nothing about whether the call is read-only, any auth/permission requirements, latency of status transitions, or whether polling is expected.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tight sentences with no filler; the core action and its returned states come first and the usage cue second.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter status lookup with no output schema, the description's enumeration of possible states effectively conveys the return values. Minor gaps remain around auth and status-transition timing, but nothing essential to invoking it is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
There is a single parameter with 100% schema description coverage, including its UUID format and origin ('returned by send_email'). The description adds no parameter detail beyond the schema, so the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('Gets') and resource ('current status of a specific email') and enumerates the possible result states (pending, processing, sent, failed). This distinguishes it from the adjacent write operations send_email and cancel_email without requiring the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly frames the use case: 'check whether a sent or scheduled email has been delivered.' It gives clear positive context but names no exclusions or alternative tools for related needs.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
horizon_get_leaderboard_aroundGet Leaderboard Around UserB
Gets leaderboard entries around a specific user's position on a horizOn leaderboard. Pass leaderboardKey to target a specific board.
| Name | Required | Description | Default |
|---|---|---|---|
| range | No | Number of entries around the user (1-50, default 10) | |
| userId | Yes | User ID (UUID) | |
| leaderboardKey | No | Leaderboard key — selects a named board on the API key. Omit to use the default board. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden. It says nothing about authentication requirements, rate limits, behavior when the user is unranked or absent, or what the returned entries look like — notable gaps for a no-annotation tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, front-loaded with the core action followed by the one parameter hint. No filler, though the second sentence largely duplicates the schema's leaderboardKey description.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema and no annotations, the description should ideally describe the return shape (entry list, ranks) and edge cases such as unranked users. It covers the core purpose adequately but leaves these gaps for a fairly simple read tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so range, userId, and leaderboardKey are already documented in the schema, and the description only restates the leaderboardKey default behavior. Baseline 3 applies when the schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Gets leaderboard entries around a specific user's position'), which is more precise than the sibling get_leaderboard_top or get_user_rank. It does not explicitly name those siblings, so an agent must infer the distinction, keeping this below 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The note about passing leaderboardKey to target a board versus omitting it for the default gives some operating context, but there is no guidance on when to prefer this over horizon_get_leaderboard_top or horizon_get_user_rank. Usage is implied by the name rather than stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
horizon_get_leaderboard_topGet Leaderboard TopC
Gets the top entries from a horizOn leaderboard. Pass leaderboardKey to target a specific board.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Number of top entries to return (1-100, default 10) | |
| userId | Yes | User ID (UUID) | |
| leaderboardKey | No | Leaderboard key — selects a named board on the API key. Omit to use the default board. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden. 'Gets' implies a read, but the description never states auth requirements, whether the board is scoped to the API key, pagination behavior, or ordering/direction of 'top'. For a read tool with zero annotation coverage this is thin.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences with no filler, and the core purpose is front-loaded before the parameter note. Nothing is wasted, though it is arguably too terse given the missing usage and behavioral context.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema and no annotations, the description would ideally clarify return shape, ordering, and API-key scoping. It covers the basic call mechanic and the default-board behavior, which is minimally adequate but leaves real gaps for an agent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents userId, limit, and leaderboardKey including defaults and ranges. The description adds only the default-board fallback for leaderboardKey, which is a modest restatement of the schema's own wording, so baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: 'Gets the top entries from a horizOn leaderboard,' which tells an agent exactly what the call returns. It does not explicitly differentiate from siblings like horizon_get_leaderboard_around or horizon_get_user_rank, but the 'top entries' framing implicitly separates it from those.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The only guidance is how to target a board via leaderboardKey, which is parameter usage rather than when-to-use. There is no statement of when this tool is preferred over horizon_get_user_rank or horizon_get_leaderboard_around, and no prerequisites or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
horizon_get_localizationGet LocalizationC
Gets a single localized string value by key from horizOn, optionally for a specific language.
| Name | Required | Description | Default |
|---|---|---|---|
| key | Yes | Localization key (max 100 characters) | |
| lang | No | ISO 639-1 language code (2 characters). One of: en, de, es, fr, it, pt, nl, pl, ru, ja, zh, ar, ko, tr, id. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden. It does not disclose what happens when the key is missing, whether a default language is assumed, or any permission/caching behavior — it merely restates that a value is retrieved.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence that maps directly onto the two parameters, with no filler. It is appropriately sized for a simple read tool, though it could spend one more clause on fallback behavior.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 2-parameter read tool with full schema coverage and no output schema, the description is minimally adequate. The key gap is fallback/default-language behavior and missing-key handling, which the schema does not cover.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so both parameters (key, lang) are already fully documented with lengths and the ISO 639-1 language list. The description adds nothing beyond what the schema provides, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource: 'Gets a single localized string value by key'. The word 'single' implicitly distinguishes it from the sibling horizon_get_all_localizations, though the alternative 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No when-to-use guidance and no alternatives named. An agent gets no help deciding between this, horizon_get_all_localizations, and horizon_get_localization_languages, nor on the trade-off of omitting the optional lang parameter.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
horizon_get_localization_languagesGet Localization LanguagesA
Gets the list of languages that have localizations available for the app.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the disclosure burden; 'Gets' does signal a read-only operation. It says nothing about authentication requirements, whether results are cached, or the shape/ordering of the returned list. For a trivial zero-parameter read this is a modest but real gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with zero filler; the resource and scope are conveyed immediately. Nothing is padded or redundant.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no parameters and no output schema, the description is nearly sufficient — 'list of languages' adequately characterizes the return. It could still note whether language codes or display names are returned and whether auth is required, but those are minor omissions for a simple read.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes no parameters, so this dimension hits the baseline of 4. There is no parameter semantics to document and nothing for the description to compensate for.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (Gets) and resource (list of languages with localizations available), which is clear on its own. However, it does not differentiate itself from the closely related siblings horizon_get_localization or horizon_get_all_localizations, so an agent must infer the distinction between 'languages' and 'localizations'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no when-to-use guidance, no prerequisites, and no mention of the sibling tools (e.g. horizon_get_localization) that overlap in scope. The agent is left to infer usage entirely from the name.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
horizon_get_newsGet NewsC
Gets news articles from horizOn with optional language filtering.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Number of news items to return (0-100, default 20) | |
| languageCode | No | ISO 639-1 language code (2 characters, e.g. 'en') |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden, yet it only says 'gets'. It omits whether authentication is required, how results are ordered or paginated, and what happens when no news exists — meaningful gaps for a network-backed read tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with no wasted words. It is efficient, though it could carry one more clause of useful context without becoming bloated.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a two-parameter, optional-args read tool with no output schema, the description is minimally viable but leaves out auth requirements, result ordering, and pagination behavior that an agent would want before calling it.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so both limit and languageCode are fully documented in the schema (range, default, ISO 639-1 format). The description's mention of optional language filtering adds nothing beyond that, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description gives a specific verb ('Gets') and resource ('news articles from horizOn') plus the scope of filtering. No sibling tool retrieves news, so differentiation is implicit, but the purpose is unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no statement of when to use this tool, when not to, or which alternatives exist. Nothing indicates whether it requires authentication or how it relates to the other horizOn read tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
horizon_get_remote_configGet Remote ConfigB
Gets a single remote configuration value by key from horizOn.
| Name | Required | Description | Default |
|---|---|---|---|
| key | Yes | Configuration key (max 256 characters) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden, and it discloses almost nothing: no note on authentication/prerequisites, no behavior when the key is absent (error vs null), no caching or rate-limit context. 'Gets' only implies read-only semantics that are already obvious from the name.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with no filler, appropriately sized for a trivial getter. It is slightly under-specified rather than padded, so it does not earn a 5.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
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 no output schema and no annotations, the description is nearly sufficient, but it omits the not-found behavior and any auth prerequisite — small but real gaps for an agent deciding how to handle the result.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and the single parameter has a documented max length, so the schema already carries the semantics. The description restates 'by key' without adding format, casing, or namespace conventions for keys.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (Gets) and resource (a single remote configuration value) with the lookup key, and the word 'single' implicitly separates it from horizon_get_all_remote_configs. However, it never names that sibling, so the distinction is inferred rather than stated.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied by 'by key' — call this when you need one specific config value — but there is no explicit when-to-use or when-not guidance, and the obvious alternative (horizon_get_all_remote_configs) is not mentioned as the bulk-retrieval route.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
horizon_get_user_rankGet User RankB
Gets the rank of a specific user on a horizOn leaderboard. Pass leaderboardKey to target a specific board.
| Name | Required | Description | Default |
|---|---|---|---|
| userId | Yes | User ID (UUID) | |
| leaderboardKey | No | Leaderboard key — selects a named board on the API key. Omit to use the default board. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It says nothing about auth requirements, whether the user must already be ranked, what happens if the user is absent from the board, or the shape of the returned rank (numeric vs object). For a query tool with zero annotation coverage this is a notable gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences with no filler, front-loading the primary action before the optional targeting hint. Every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given two simple parameters and no output schema, the description covers the basic action but leaves return values, error/absence behavior, and auth expectations unspecified. It is minimally adequate for a simple read query but does not fill the gaps left by missing annotations and output schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, and both parameters are documented in the schema, including the leaderboardKey default behavior. The description's mention of leaderboardKey adds no meaning beyond the schema, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (Gets) and resource (rank of a specific user on a leaderboard), which is clearly narrower than the sibling 'horizon_get_leaderboard_top' and 'horizon_get_leaderboard_around'. However, it does not explicitly call out how it differs from the around-based sibling that likely also surfaces the user's position.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description offers no when-to-use or when-not-to-use guidance relative to alternatives like horizon_get_leaderboard_around or horizon_get_leaderboard_top. The only routing hint, 'Pass leaderboardKey to target a specific board', is parameter guidance rather than usage guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
horizon_list_leaderboardsList Leaderboard BoardsA
Lists the available horizOn leaderboard boards for the configured app API key, including each board key for multi-board calls.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It discloses that results are scoped to the configured app API key, which implies an auth/configuration prerequisite, but says nothing about return format, pagination, or failure modes. It is a harmless read, so the gap is modest, but the disclosure is thin.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single sentence with the resource front-loaded and no filler. Every clause (app API key scoping, board keys for multi-board calls) adds information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema and no annotations, so the description must carry the return-value burden; it only partially does, telling the agent it gets board keys but not the list shape or what else each board entry contains. Adequate but leaves the agent guessing about the response.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so per the baseline there is nothing for the description to compensate for. The mention of 'configured app API key' correctly signals that scoping comes from ambient config rather than an argument.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Lists') and resource ('leaderboard boards'), scoped to the configured app API key, which clearly separates it from data-fetching siblings like horizon_get_leaderboard_top or horizon_get_user_rank. It does not explicitly name those siblings, but the resource is unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is only implied: the phrase 'including each board key for multi-board calls' hints that this is the discovery step before board-specific calls. There is no explicit when-to-use statement or named alternative to route the agent.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
horizon_load_cloud_dataLoad Cloud DataC
Loads cloud save data for a user from horizOn.
| Name | Required | Description | Default |
|---|---|---|---|
| userId | Yes | User ID (UUID) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and falls short: it does not say whether this requires an authenticated session, whether loaded data overwrites local state, what the return payload contains, or how errors/no-data cases are handled. 'Loads' is the only behavioral signal given.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single, front-loaded sentence with no filler. It is efficient, though the brevity contributes to the transparency gaps noted elsewhere rather than the structure itself being at fault.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema and no annotations, so the description is the only source for return values, side effects, and auth requirements – and it supplies none of them. For a data-retrieval tool that likely depends on a prior sign-in, this is materially incomplete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and the single userId parameter is fully typed and documented (UUID format with pattern), so the schema does the heavy lifting. The description adds only 'for a user', which merely echoes the parameter's existence, so baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Loads cloud save data') with the scope ('for a user'), so an agent knows exactly what operation this performs. It does not explicitly distinguish itself from the sibling horizon_save_cloud_data, but the verb makes the direction of data flow unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this versus the save counterpart, no prerequisites (e.g., whether the user must be signed in first), and no statement of what happens on missing or empty cloud data. The agent must infer all usage context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
horizon_redeem_gift_codeRedeem Gift CodeC
Redeems a gift code on horizOn for the given user.
| Name | Required | Description | Default |
|---|---|---|---|
| code | Yes | Gift code to redeem (max 50 characters) | |
| userId | Yes | User ID (UUID) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden and delivers almost nothing: it doesn't state whether redeeming consumes the code, whether it is irreversible, what auth is required, what errors occur (invalid/expired/already-redeemed), or what the response contains. For a mutating redemption operation this is a significant gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The single sentence is front-loaded and free of filler, which is good, but it is so thin that it functions more as under-specification than as conciseness.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No annotations, no output schema, and a mutating tool with a closely related sibling (validate_gift_code) left unmentioned. Given the complexity of redemption flows, the description is not complete enough for an agent to invoke it confidently.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with both 'code' (max 50 chars) and 'userId' (UUID) fully documented in the schema. The description adds no parameter syntax or format detail beyond that, so the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (Redeems) and resource (gift code) with the target user, so the core action is unambiguous. However, it does not distinguish itself from the sibling horizon_validate_gift_code, which an agent could easily confuse with this tool.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no when-to-use guidance, no prerequisites, and no mention of alternatives. The sibling horizon_validate_gift_code exists and presumably should be used to check a code before redeeming, but the description never says so.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
horizon_save_cloud_dataSave Cloud DataC
Saves cloud data for a user on horizOn. Data is a string (max 300,000 characters).
| Name | Required | Description | Default |
|---|---|---|---|
| data | Yes | Save data string (max 300,000 characters) | |
| userId | Yes | User ID (UUID) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, so the description carries the full behavioral burden, and it delivers little. It omits the critical write semantics: whether saving overwrites or merges existing cloud data, whether the user must be signed in, and whether the call is idempotent. Only the size limit is disclosed, and that is already in 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short, front-loaded sentences with no padding. It loses a point only because the second sentence duplicates the maxLength constraint already present in the schema instead of spending that space on behavior.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a mutation tool with zero annotations, no output schema, and opaque payload semantics, the description is not complete enough. It never says what the call returns (or whether it can fail), nor how the saved data relates to the data returned by horizon_load_cloud_data.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% — both userId and data are documented with format and maxLength — so baseline 3 applies. The description's restatement of the 300,000-character limit adds nothing beyond the schema, and it says nothing about the meaning or expected shape of the opaque 'data' string.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Saves cloud data for a user') on a named platform, which is enough for basic selection. However, it never distinguishes itself from its obvious sibling horizon_load_cloud_data, and the odd 'horizOn' capitalization is noise rather than signal.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this instead of load_cloud_data or any other persistence tool, no prerequisite (e.g. authentication required), and no mention of what happens to previously saved data. The agent must infer all usage context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
horizon_send_emailSend EmailA
Sends a transactional email to a registered horizOn user using a pre-configured template. The email is sent through the developer's own SMTP server. Optionally schedule delivery for a future time (up to 30 days ahead).
| Name | Required | Description | Default |
|---|---|---|---|
| userId | Yes | horizOn user ID of the recipient | |
| language | Yes | ISO 639-1 language code for template rendering (e.g. 'en', 'de') | |
| variables | Yes | Template variable values as key-value pairs (e.g. {"username": "John"}) | |
| scheduledAt | No | ISO 8601 timestamp for scheduled delivery. Omit to send immediately. | |
| templateSlug | Yes | Slug of the email template (e.g. 'welcome', 'reminder') |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and it does provide meaningful behavioral context: transactional scope, template constraint, SMTP routing through the developer's own server, and a 30-day scheduling ceiling. It does not disclose auth requirements, rate limits, or what happens on failure, which keeps it short of a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three tight sentences front-load the core action and then add the delivery channel and scheduling constraint with no filler. It could be marginally shortened but every clause adds relevant information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a mutation tool with no annotations and no output schema, the description covers purpose, mechanism, and scheduling but leaves gaps: it does not say what the tool returns (an email ID?), whether sending is idempotent, or how scheduled sends interact with horizon_cancel_email. It is adequate but not complete for the tool's complexity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all five parameters including userId format, ISO 639-1 language, variables map, templateSlug, and scheduledAt. The description adds the 30-day scheduling bound and the template concept, but otherwise the schema does the heavy lifting — the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb (Sends), resource (transactional email), recipient constraint (registered horizOn user), and mechanism (pre-configured template via the developer's own SMTP server). This distinguishes it from siblings like horizon_cancel_email and horizon_get_email_status, which are the only other email-related tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied by 'transactional email ... using a pre-configured template' and the scheduling hint, but there is no explicit when-to-use vs when-not-to-use guidance and no explicit routing to horizon_cancel_email or horizon_get_email_status for follow-up. A reader can infer the context, but nothing is stated outright.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
horizon_signin_anonymousSign In AnonymouslyC
Signs in an anonymous user on horizOn using their anonymous token.
| Name | Required | Description | Default |
|---|---|---|---|
| anonymousToken | Yes | Anonymous token (max 32 characters) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full behavioral burden but discloses almost nothing beyond the mechanics. It does not say whether this establishes a persistent session, what happens on an invalid/expired token, or whether the operation has side effects, which is important for an auth operation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single compact sentence with the action front-loaded and no filler. It is appropriately sized, though the brevity is also the source of the missing guidance.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For an auth entry point with no annotations and no output schema, the description should explain the token's origin, the resulting session state, and failure behavior. None of that is present, leaving the agent unable to reason about post-conditions.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, and the single anonymousToken parameter is fully documented in the schema including its max length. The description merely restates the token's role, so baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (signs in) and resource (anonymous user) with the mechanism (anonymous token). However, it does not distinguish itself from the sibling horizon_signup_anonymous, which is the closest alternative and the likely source of the token, so sibling differentiation is left to inference.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No when-to-use guidance is offered. It never states the prerequisite that an anonymous token must first be obtained via horizon_signup_anonymous, nor when an agent should prefer this over horizon_signin_email or horizon_check_auth.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
horizon_signin_emailSign In with EmailC
Signs in an existing user on horizOn using email and password.
| Name | Required | Description | Default |
|---|---|---|---|
| Yes | Email address | ||
| password | Yes | Password |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden and largely fails: it says nothing about what a successful sign-in returns (session/token), failure modes for invalid credentials, or rate limiting. For an authentication tool this is a meaningful gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with no wasted clauses. It is terse, but every word contributes and nothing is buried.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For an auth boundary tool with no annotations and no output schema, the definition should explain the result of a successful call and the failure contract. It omits both, leaving the agent to guess what it gets back after authenticating.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% with both required parameters (email, password) documented, so the schema does the heavy lifting and a 3 is the baseline. The description adds no syntax, format, or constraint detail beyond what the schema already states.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb and resource ('signs in an existing user') plus the credential mechanism ('using email and password'), which is clearer than a bare title restatement. It partially distinguishes from horizon_signup_email via 'existing user', but does not explicitly differentiate from horizon_signin_anonymous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no when-to-use guidance, no prerequisites, and no mention of alternatives such as horizon_signin_anonymous or horizon_signup_email. The only implicit signal is 'existing user', which is too weak to count as direction.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
horizon_signup_anonymousSign Up AnonymouslyC
Creates a new anonymous user account on horizOn with a display name.
| Name | Required | Description | Default |
|---|---|---|---|
| displayName | Yes | Display name for the anonymous user (max 30 characters) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden. It confirms a creation mutation but omits auth requirements, whether a session/token is created, whether existing anonymous accounts are affected, and any rate limits or side effects.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with no wasted words. It is appropriately sized for a one-parameter tool and puts the action first.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a mutation tool with no annotations and no output schema, the description does not explain session behavior, prerequisites, or how the result relates to subsequent sign-in calls. It is enough to identify the action but leaves important invocation context missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents displayName and its max length. The description only restates the display-name parameter and adds no format or constraint details beyond the schema, making the baseline 3 appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: creates a new anonymous user account. It also names the required display name, but does not explicitly differentiate from siblings such as horizon_signup_email or horizon_signin_anonymous beyond the tool name.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is given on when to choose this tool over horizon_signup_email, horizon_signin_anonymous, or other auth tools. Prerequisites and conditions for use are absent.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
horizon_signup_emailSign Up with EmailC
Creates a new user account on horizOn with email and password.
| Name | Required | Description | Default |
|---|---|---|---|
| Yes | Email address (max 40 characters) | ||
| password | Yes | Password (4-32 characters) | |
| displayName | Yes | Display name (max 30 characters) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden. 'Creates' flags a mutation, but nothing is said about duplicate-email handling, password policy enforcement, whether a session token is returned, or what a failure looks like.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with no filler. It is efficient, though its brevity is partly the reason usage and behavior context are missing.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For an unannotated account-creation mutation with no output schema, this one-liner leaves out error outcomes, session/return behavior, and signup-path routing. An agent could call it, but not confidently handle the result.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so constraints (lengths, email pattern) are already documented. The description names email and password but omits displayName, a required parameter, so it adds no information beyond the schema baseline.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Creates a new user account') plus the credential mode ('with email and password'), which implicitly separates it from horizon_signup_anonymous. It stops short of explicitly naming that sibling, so an agent must still infer the routing.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No when-to-use context, no prerequisites, and no mention of the sibling alternatives horizon_signup_anonymous or horizon_signin_email. The agent gets no guidance on which signup path to pick.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
horizon_submit_feedbackSubmit FeedbackC
Submits user feedback to horizOn with a title, message, and optional category, email, and device info.
| Name | Required | Description | Default |
|---|---|---|---|
| No | Contact email address | ||
| title | Yes | Feedback title (1-100 characters) | |
| userId | Yes | User ID (UUID) | |
| message | Yes | Feedback message (1-2048 characters) | |
| category | No | Feedback category (max 50 characters) | |
| deviceInfo | No | Device information (max 500 characters) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden. It doesn't disclose whether submission requires an authenticated user, whether feedback is delivered anywhere, whether it is rate-limited, or what happens on failure — notable gaps for a mutation tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single efficient sentence with the verb and payload front-loaded; nothing is wasted. It is short enough that it could easily have afforded one more clause of usage or behavior guidance.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 6-parameter mutation tool with no annotations and no output schema, the description covers the surface but not the operational context an agent needs (auth, rate limits, effect). Adequate but with clear gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so every one of the six parameters is already documented with type, length, and format constraints. The description's paraphrase of title/message/category/email/deviceInfo adds no syntax or meaning beyond that, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (submits) and resource (user feedback) plus the payload shape, which distinguishes it from siblings like horizon_create_log or horizon_create_crash_report. It stops short of naming any sibling explicitly, so differentiation is implicit rather than stated.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this versus horizon_create_log, horizon_create_crash_report, or horizon_send_email, all of which are write/send style siblings. No prerequisites (e.g., must the userId be authenticated) are given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
horizon_submit_scoreSubmit ScoreB
Submits a score to a horizOn leaderboard for a given user. Pass leaderboardKey to target a specific board; omit it for the default board.
| Name | Required | Description | Default |
|---|---|---|---|
| score | Yes | Score to submit (non-negative integer) | |
| userId | Yes | User ID (UUID) | |
| leaderboardKey | No | Leaderboard key — selects a named board on the API key. Omit to use the default board. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden. It discloses the default-board fallback, but says nothing about auth requirements, whether a new submission replaces or appends to the user's prior score, or how invalid leaderboard keys are handled — significant gaps for a write operation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences with the core action front-loaded and the conditional parameter guidance immediately after. Nothing is padded or out of order.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema and no annotations, and the three parameters are fully documented in the schema, so the description only needs to cover purpose and behavior. It does the former well but leaves out write semantics (overwrite vs. append) and auth expectations, so it is adequate rather than complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents score, userId, and leaderboardKey including the omit-for-default behavior. The description's leaderboardKey sentence largely repeats what the schema says, adding little beyond the baseline.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource ('Submits a score to a horizOn leaderboard for a given user'), which clearly separates it from read-side siblings like horizon_get_user_rank or horizon_get_leaderboard_top. It does not name a sibling directly, but the write action is unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explains the leaderboardKey branch ('Pass leaderboardKey to target a specific board; omit it for the default board'), which is genuinely useful routing guidance. However, it gives no broader when-to-use context, prerequisites (e.g. auth), or alternatives to this tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
horizon_test_connectionTest ConnectionA
Tests the connection to the horizOn API by fetching all remote configs as a health check. Returns success or failure.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It usefully discloses the mechanism (fetches all remote configs) and the return shape (success or failure), but says nothing about auth prerequisites, potential latency/cost of pulling every config, or whether it has side effects.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, front-loaded with purpose and mechanism, with zero filler. Every clause earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema exists, and the description does cover the return value ('success or failure'), which is sufficient on the output side. However, for a tool in a suite with signin/anonymous-auth siblings, the absence of any prerequisite or auth note leaves a gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so there is nothing to document; the baseline for a parameterless tool is 4. The description adds no spurious parameter discussion.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Names a specific verb and resource ('Tests the connection to the horizOn API') and states the mechanism (fetching all remote configs) plus the outcome (success or failure). It is distinguishable from siblings like horizon_get_all_remote_configs by framing itself as a health check, though it does not explicitly call out that distinction.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The framing as a 'health check' implies when it is useful, but the description gives no explicit when-to-use/when-not guidance and never references alternatives such as horizon_check_auth despite many sibling auth/connection tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
horizon_validate_gift_codeValidate Gift CodeA
Validates a gift code on horizOn without redeeming it. Checks if the code is valid for the given user.
| Name | Required | Description | Default |
|---|---|---|---|
| code | Yes | Gift code to validate (max 50 characters) | |
| userId | Yes | User ID (UUID) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It usefully discloses that the operation is non-mutating ('without redeeming it'), but says nothing about what an invalid code yields, error behavior, auth requirements, or rate limits for a 2-required-param live service call.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences with the non-redemption constraint front-loaded in the first; every clause earns its place and nothing is padded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no annotations and no output schema, the description should at least hint at the return shape (boolean validity vs. error object) for a validation call. It covers purpose well but leaves the response contract entirely unspecified.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with both code (max 50 chars) and userId (UUID) documented in the schema, so the baseline is 3. The description only adds that validity is evaluated 'for the given user,' a marginal clarification over the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (validates), resource (gift code), and scope. The clause 'without redeeming it' directly distinguishes it from the sibling horizon_redeem_gift_code, so an agent can route between the two without opening either schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives a clear use context (checking validity of a code for a user) and implicitly separates it from redemption, but it never names the alternative tool or states when a check is preferable to just redeeming.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
28 tool updates
v1.5.4- First observed
horizon_cancel_email - First observed
horizon_check_auth - First observed
horizon_create_crash_report - First observed
horizon_create_crash_session - First observed
horizon_create_log - First observed
horizon_get_all_localizations - First observed
horizon_get_all_remote_configs - First observed
horizon_get_email_status - First observed
horizon_get_leaderboard_around - First observed
horizon_get_leaderboard_top - First observed
horizon_get_localization - First observed
horizon_get_localization_languages - First observed
horizon_get_news - First observed
horizon_get_remote_config - First observed
horizon_get_user_rank - First observed
horizon_list_leaderboards - First observed
horizon_load_cloud_data - First observed
horizon_redeem_gift_code - First observed
horizon_save_cloud_data - First observed
horizon_send_email - First observed
horizon_signin_anonymous - First observed
horizon_signin_email - First observed
horizon_signup_anonymous - First observed
horizon_signup_email - First observed
horizon_submit_feedback - First observed
horizon_submit_score - First observed
horizon_test_connection - First observed
horizon_validate_gift_code
TDQS
Scored across 28 tools
Tools map to distinct resources and actions; pairs like signup/signin and leaderboard top/around are clearly differentiated by descriptions. The only minor overlap is test_connection versus get_all_remote_configs, but the former is explicitly framed as a health check.
All tools use a consistent horizon_ prefix and snake_case verb_noun or verb_noun_modifier pattern. There is no mixing of camelCase or arbitrary naming styles.
28 tools is high for a single MCP server and exceeds the ideal 3-15 range. However, the server exposes a broad BaaS surface across auth, leaderboards, cloud save, config, localization, gift codes, feedback/logging/crash, and email, and each tool maps to a distinct operation, so it is heavy but not gratuitous.
Coverage is broad and covers core client workflows across auth, leaderboards, cloud data, remote config, localization, gift codes, feedback, logging, crash reporting, and email. Minor gaps exist for read/list or admin operations (e.g., retrieving feedback/logs/crashes, listing emails, updating remote config), but these may be outside the client-side scope.
Maintenance
Related MCP Connectors
Backend for AI-built apps: database, auth, files, email, AI, payments, deploy, realtime. 170+ tools.
Zero-setup MCP gateway securely connecting AI to your tools with authentication and workflows
Discover AI tools for game development — 100+ tools indexed by engine, task, and pricing.
Versioned documentation registry and semantic search for AI tools and coding assistants.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceEnables AI assistants to interact with Godot game projects through real-time error detection, automated testing, code analysis, and safe git-based patching. Provides comprehensive project context and development workflow automation for Godot developers.MIT
- AlicenseNot gradedqualityCmaintenanceEnables complete natural language control of Godot Engine 4.5+ with 76 tools for managing scripts, scenes, nodes, animations, physics, tilemaps, audio, shaders, navigation, particles, UI, lighting, assets, and exports. Integrates with Claude Desktop, VS Code, and Ollama for AI-assisted game development.238 npm2MIT
- AlicenseNot gradedqualityDmaintenanceProvides a comprehensive integration between LLMs and the Godot Engine, enabling AI assistants to intelligently manipulate project files, scripts, and the live editor. It supports advanced workflows including version-aware documentation querying, automated E2E game testing, and real-time visual context capture.14 npm26MIT
- AlicenseNot gradedqualityDmaintenanceProvides AI assistants with access to the complete Godot Engine documentation, enabling developers to get answers about Godot classes, tutorials, and features directly in their chat interface.74MIT