scry
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., "@scrylist all active design entries"
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.
scry
Scry Marker Specification - This project implements a formal, generic scry marker contract defined here
See scryspec.com for an overview.
Marker-indexed SQL cache MCP server. Scry indexes in-file @scry.* markers
into a SQLite database that agents query via read-only SQL, providing
structured project knowledge without LLM reasoning.
Install
uv pip install scry-mcp
# or:
pip install scry-mcpThe PyPI distribution is scry-mcp (the bare name scry was already taken
on PyPI). The import name and the installed console command are both
scry.
Related MCP server: code-index
Quickstart
# In your project root:
scry init # scaffolds agent/ + driver dirs, updates .gitignoreThen add it to your MCP client config:
{
"mcpServers": {
"scry": {
"command": "scry"
}
}
}The MCP client inherits cwd from wherever it's launched, and scry walks
up from there looking for an agent/ directory — so the same config
works for any project. Bare scry (no subcommand) starts the MCP
server over stdio — that's what Claude calls. Other subcommands:
Command | Purpose |
| Run the MCP server (default). |
| Create |
| One-shot batch reindex without booting the server. |
| Print the package version. |
The server walks up from cwd until it finds an agent/ directory; that
becomes the project root. The cache lives at
agent/drivers/@<namespace>/scry/data/project.db and is gitignored.
Markers
Scry recognizes three marker kinds per scry-spec v1.2.0: @scry.entry and
@scry.anchor are block markers with a YAML body between open/close tokens;
@scry.bind is a line or block marker declaring cross-references.
<!-- @scry.entry
id: design.auth-flow~a1b2c3d4
kind: design
summary: >
JWT auth middleware, token validation, refresh flow
status: active
weight: 0.85
tags: ["scope:auth", "topic:security"]
rationale: >
Missing this causes auth bypass bugs
applies: modifying auth, adding protected endpoints
seeded_questions:
- How does token refresh work?
extras:
owner: auth-team
jira: AUTH-1247
reviewed_at: 2026-05-19
@scry.entry.end -->
<!-- @scry.anchor auth-check~f1e2d3c4
description: JWT validation point for protected routes
@scry.anchor.end --># @scry.bind validate-jwt~a1b2c3d4 spec.auth~xyz89012#FR3
# @scry.bind jwt-expiry~b2c3d4e5 spec.auth~xyz89012#UT1Block markers can be embedded in any host-language comment style (HTML, Python, JS, JSDoc, Rust, bare YAML). Comment prefixes are inferred from the YAML body — there is no per-language config.
extras field (scry-spec v1.2.0, FR4.B)
@scry.entry accepts an optional extras field: a single-depth map of
arbitrary string keys to scalar values (string | number | boolean | null).
Use it to attach structured metadata that isn't part of the core schema —
ownership, ticket IDs, cost ledgers, review timestamps, anything you want
to query later.
Constraints:
Single depth only — values must be scalars; nested maps and lists are diagnostic violations.
Serialized size ≤ 4 KB (the spec's SHOULD-level cap).
Oversize payloads MUST round-trip intact — the cap is a diagnostic, not a truncation gate. Empty
extras: {}emits a SHOULD-level warning.
Indexed and queryable as of v0.17.0. The extras field is serialized to
compact JSON-text in the scry__doc.extras column (NULL when absent),
and exposed to scry_sql via SQLite JSON1. A doc with
extras:
cost_usd: 12.5
tier: gold
active: trueanswers queries like:
SELECT id,
json_extract(extras, '$.cost_usd') AS cost,
json_extract(extras, '$.tier') AS tier
FROM scry__doc
WHERE kind = 'deliverable'
AND json_extract(extras, '$.active') = 1
ORDER BY cost DESC;Round-trip is byte-equivalent for the YAML scalar map: integers, floats,
strings, booleans, and null are preserved.
@scry.entry kind values (v1.2.0 baseline)
kind | use for |
| architecture and design docs |
| canonical recipes, established patterns |
| requirements and specifications |
| post-mortems, "I tried X and it failed because Y" |
| service quirks, undocumented behaviors |
| discrete work items |
| phase markers, exit criteria |
| objective satisfied by a deliverable set via the |
| wake/session reports |
| security or integrity audits |
| research notes |
| implementation-specific docs |
MCP tools
Tool | Purpose |
| Read-only SQL gateway. Rejects mutator keywords. Returns |
| Full-text search over indexed file bodies ( |
| Generate a collision-free ID and the marker schema. |
| Preferred minter — same as |
| Batch reindex from disk. |
| Lower the index back to disk-only state — truncates all index tables atomically (schema preserved, disk markers untouched). Requires user confirmation; |
| Create a |
| Discover and run validation scripts from |
| Probe the project DB and report |
Database schema
Marker-backed core tables:
Table | Holds |
| One row per |
| Tags as a join table — |
| Seeded questions per doc — |
| One row per |
| Seeded questions per anchor — |
| One row per |
| Typed edges between docs — |
| Universal file-body index — |
| Lint-style warnings emitted by the parser/indexer — id, kind, marker_kind, marker_id, file_path, message, detected_at. |
| Schema migration ledger. |
FTS5 virtual tables (trigger-maintained, queryable via FTS MATCH):
FTS table | Searches |
| Doc summary, rationale, applies, current_path. |
| Tag strings. |
| Doc seeded questions. |
| Anchor descriptions. |
| Bind source_local_id, target_id, comment. |
| Full file bodies. Prefer the |
The cache is fully reconstructable from disk via scry_surface. The DB is
gitignored; after git pull, agents call scry_surface to rebuild.
Watcher
A daemon thread runs alongside the MCP server, watching the project tree
with a 150 ms debounce window. A lock file at
agent/drivers/@<ns>/scry/runtime/lock performs PID-based primary
election so multiple sessions don't race writes. The primary instance
runs a cold scan on startup; secondaries observe and wait.
On file deletion: docs are soft-deleted (missing_since set);
anchors and binds are hard-deleted.
Tests
uv pip install -e ".[dev]"
pytest159 tests cover the parser, SQL gateway, mint, surface, watcher
plumbing, script discovery, relationship cycle detection, FR4.B extras
indexing + JSON1 queryability, schema-migration backfill, and
concurrent-connection retry behavior.
License
MIT — see LICENSE.
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
- 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/prmichaelsen/scry'
If you have feedback or need assistance with the MCP directory API, please join our Discord server