prism MCP Server
Click on "Install 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., "@prism MCP Serverwhat's the shape of api_response.json?"
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.
π» 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 pathsRelated MCP server: Universal JSON Agent MCP
The four verbs
Command | Gives you | For |
| the skeleton: keysβtypes, array lengths, nesting | seeing the structure of a blob you've never met |
| the subtree at path | pulling out just the part you need |
| the paths where a key/value lives | locating something in a big document |
| 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.parseis all-or-nothing; a 2 GB file handed to it is a frozen process.Depth- and key-bounded.
shapestops 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
readhands back the value's shape and its honest size β never a silently truncated body that looks complete.Node-bounded search.
findvisits 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-RPCThe 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
This server cannot be installed
Maintenance
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
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
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