Skip to main content
Glama
tools-for-agents

prism MCP Server

πŸ”» prism

The agent's data reader. Point it at a JSON, JSONL, CSV, or TSV blob β€” a file, a URL, or a string you already hold β€” and get back its shape and the slice you asked for, never the whole thing. What scout does for a web page and lens does for a source file, prism does for structured data.

Part of tools-for-agents. Zero dependencies β€” the Node standard library and nothing else. CLI + web view + MCP.


Why

An agent that gets handed a 200 KB API response has three bad options: paste it all into the context window, guess at its structure, or write a throwaway script to poke at it. prism is the fourth option.

# the SHAPE of a big response β€” a few hundred tokens instead of the whole payload
curl -s https://api.example.com/users | prism shape -
{
  "type": "object",
  "keys": 4,
  "fields": {
    "page":  { "type": "int", "sample": 2 },
    "total": { "type": "int", "sample": 1284 },
    "users": { "type": "array", "len": 50, "sampled": 20,
      "of": { "type": "object", "keys": 4, "fields": {
        "id":    { "type": "int" },
        "name":  { "type": "string" },
        "email": { "type": "string" },
        "roles": { "type": "array", "len": 2, "of": { "type": "string" } } } } }
  }
}

Now you know where everything is. Read exactly what you need:

prism read  users.json --path 'data.users[*].email'   # every email, and nothing else
prism find  config.json "timeout"                       # where does 'timeout' live? β†’ the paths

Related MCP server: Universal JSON Agent MCP

The four verbs

Command

Gives you

For

prism shape <src>

the skeleton: keys→types, array lengths, nesting

seeing the structure of a blob you've never met

prism read <src> --path P

the subtree at path P, token-budgeted

pulling out just the part you need

prism find <src> "<q>"

the paths where a key/value lives

locating something in a big document

prism diff <a> <b>

the paths that changed β€” added / removed / changed

what differs between two responses, configs, or a before and after

Sources (<src>): a file path, an http(s):// URL, or - for stdin. Paths: data.items[0].name, users[*].id ([*] maps over an array), logs[0:20] (a half-open slice β€” [:20] / [100:] too, bounds clamp), logs[-1] (a negative index counts from the end β€” [-20:] is the last twenty), $ for the root. Formats: JSON and JSONL/NDJSON auto-detect; CSV and TSV come from a .csv/.tsv source or --format csv (the header row names the columns, so a spreadsheet becomes an array of row objects that shape/read/find/diff all work on).

It is built to read untrusted data

prism reads blobs an agent did not write, so every operation is bounded β€” the same discipline that keeps a sandbox safe:

  • Byte-capped before parse. A file bigger than the cap (64 MB default) is refused up front, not read into memory to find out. JSON.parse is all-or-nothing; a 2 GB file handed to it is a frozen process.

  • Depth- and key-bounded. shape stops descending at a depth and shows a fixed number of keys per level, so the shape of a pathologically deep or wide document is still small.

  • Token-budgeted. An over-budget read hands back the value's shape and its honest size β€” never a silently truncated body that looks complete.

  • Node-bounded search. find visits at most a fixed number of nodes, and says so if it stopped early.

Every clipped or empty answer carries the size of the whole ("withheld": 9960, "len": 2000), because "20 results" and "20 of 1284 results" are different facts.

Install

node --version          # 22+; nothing to npm install
npm test                # node --test
node src/cli.js shape package.json
node src/cli.js serve   # the web view β†’ http://localhost:7970 (paste a blob, explore its shape)
npm run mcp             # the MCP server, stdio JSON-RPC

The web view

prism serve [--port 7970] opens a single-file explorer: paste a blob (or point at a file or URL), see its shape as a collapsible tree, click any node to read the value at its path (token-budgeted) β€” or type a path (users[0:10], logs[-1]) to reach a slice or an element the tree can't click to β€” find a key or value across the whole document, and Compare ⟷ it against a second blob to diff them (added / removed / changed paths). A read as selector declares the format β€” auto sniffs JSON vs JSONL, and because a spreadsheet can't be sniffed apart from prose you pick CSV / TSV to read a pasted sheet as an array of row objects (the same knob rides the file/URL load and the compare blob). It holds one document in RAM β€” no store, nothing written to disk.

MCP

Four tools β€” prism_shape, prism_read, prism_find, prism_diff β€” each read-only and open-world. Pass a blob inline as data, or point at a file/URL with source:

{ "name": "prism_read",
  "arguments": { "data": "{\"user\":{\"email\":\"a@x.com\"}}", "path": "user.email" } }

License

MIT

A
license - permissive license
-
quality - not tested
B
maintenance

Maintenance

–Maintainers
–Response time
–Release cycle
–Releases (12mo)
Commit activity

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/tools-for-agents/prism'

If you have feedback or need assistance with the MCP directory API, please join our Discord server