Skip to main content
Glama

ABS Data (observed)

Fetch and analyse data by writing code

execute

Run JavaScript in an isolated sandbox whose only capability is abs, a client with the same four verbs as this server (searchTables, describeTable, searchOptions, getData) and the same guarantees: every selection is verified against ABS before fetching. Use it for multi-series or multi-table analysis — fetch several series, compute growth rates, rank capitals, join tables — and return only the computed result, so large payloads never reach the conversation. No network beyond abs. Budgets: 10s CPU, 50 calls, 25s wall clock, 200KB result. Your code runs inside an async function; use await; console.log is captured.

// The abs object available in execute(): interface Abs { searchTables(input: { query?: string; geography?: string; frequency?: "A"|"S"|"Q"|"M"|"W"|"D"; limit?: number }): Promise<{ results: TableSummary[]; total: number }>; describeTable(table: string): Promise<{ table: TableSummary; dimensions: { id: string; position: number; optionCount: number; options?: { code: string; label: string|null }[] }[]; keyFormat: string }>; searchOptions(input: { table: string; dimension: string; query: string; limit?: number }): Promise<{ options: { code: string; label: string|null; parent?: string|null }[]; total: number }>; getData(input: { table: string; select?: Record<string, string|string[]>; startPeriod?: string; endPeriod?: string; lastN?: number; firstN?: number; maxRows?: number }): Promise<{ key: string; rows: { series: string; period: string; value: number|null; unit?: string|null }[]; rowsReturned: number; truncated: boolean; seriesMatched: number; fullDataUrl: string }>; } interface TableSummary { id: string; name: string|null; seriesCount: number; frequencies: string[]; coverage: { from: string|null; to: string|null }; dimensions: string[]; family: string|null; geography: string|null; matchedOptions?: { dimension: string; code: string; label: string|null }[] } // getData throws an Error whose message is JSON: { reason, dimension, message, validOptions?, alternatives? } — catch it, read validOptions, correct and retry.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
codeYesJavaScript. `abs` is in scope. Must return a value.

Output Schema

TableJSON Schema
NameRequiredDescriptionDefault
okYes
logsYes
errorNo
resultNo
truncatedNo

Schema Changelog

Changes observed during successful MCP inspections.

  1. First observed

TDQS

A4.7/5.0
Behavior5/5

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

With no annotations provided, the description carries the full behavioral burden and meets it: it discloses the sandbox isolation, the single `abs` capability, the absence of network access, CPU/call/wall-clock/result budgets, the async execution model, console.log capture, and the structured error thrown by getData. This is exactly the operational detail an agent needs before running arbitrary code.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is long, but the length is earned: the interface definitions and budget details are necessary for writing correct code. The first paragraph front-loads the core purpose, execution model, and constraints, while the interface block provides structured reference material rather than prose redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool with no annotations and a single free-form code parameter, the description is remarkably complete: it covers what code can do, what it cannot do, operational limits, async mechanics, output expectations, and error recovery. Since an output schema exists, the description does not need to document return values, and nothing essential appears missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema already documents the `code` parameter at 100% coverage, but the description goes far beyond it by specifying the execution environment, the full `Abs` client interface, budget limits, the requirement to `return` a value, and error-handling behavior. For a code-execution tool, this is substantial added meaning that the schema alone could not convey.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a precise statement of what the tool does: runs JavaScript in an isolated sandbox with an `abs` client, and it explicitly ties that to multi-series or multi-table analysis. This clearly distinguishes it from the sibling data-access tools, which provide direct single-purpose verbs like get_data or search_tables.

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

Usage Guidelines4/5

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

The description gives concrete usage scenarios ('multi-series or multi-table analysis', 'compute growth rates, rank capitals, join tables') and explains that the tool should return only computed results so large payloads do not reach the conversation. It does not explicitly name sibling tools as fallbacks for simple queries, but the use-case framing makes the intended boundary clear.

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

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.