Skip to main content
Glama
Valyay
by Valyay

Nano Stores MCP

Model Context Protocol server for Nanostores — analyze, debug and monitor your nanostores in AI assistants like Claude Desktop.

  • 📊 Static Analysis: AST-based project scanning, dependency graphs, store inspection

  • 🔥 Runtime Monitoring: Live events from @nanostores/logger, performance metrics, activity tracking

  • 📚 Documentation: Search and browse Nanostores docs by topic or store kind

  • 🎯 Zero Config: Works out of the box — auto-detects project roots and nanostores docs

  • 🌐 Framework-Agnostic: Works with React, Vue, Svelte, Angular, Solid, Preact, Lit — any framework that uses Nanostores

npx nanostores-mcp

Ask your AI: "Analyze my store architecture" or "Which stores update most frequently?"


Made at Evil Martians, product consulting for developer tools.


Table of Contents

Related MCP server: forgekit-storybook-mcp

Features

📊 Static Analysis (AST-based)

Understand your nanostores architecture without running your app:

  • Project scanning — find all stores, subscribers, and import/export relationships

  • Dependency graph — visualize how stores depend on each other (Mermaid diagrams)

  • Store inspection — type (atom/map/computed/batched/persistentAtom/persistentMap/router), location, usage patterns, related files

  • Framework-aware subscriber detection — recognizes .subscribe() / .listen() calls and component bindings across React, Vue, Svelte, and Angular

  • Vue SFC support — parses both <script> and <script setup> blocks in .vue files (requires @vue/compiler-sfc)

  • Svelte support — parses <script context="module"> and instance <script> blocks, auto-subscriptions ($storeName in templates), and filters out Svelte 5 runes ($state, $derived, $effect, etc.) so they are not mistaken for store references (requires svelte)

  • Angular DI support — resolves @nanostores/angular NanostoresService constructor injections and detects this.nanostores.useStore(...) call patterns in TypeScript component files

🔥 Runtime Monitoring (Logger Integration)

Real-time insights into your running application:

  • Live event capture — mount/unmount, value changes, action calls from @nanostores/logger

  • Performance analysis — find noisy stores, high error rates, performance bottlenecks

  • Activity metrics — change frequency, action success/failure rates, action duration

  • Combined analysis — merge static structure with runtime behavior for deep debugging

Search and browse Nanostores documentation directly from your AI assistant:

  • Full-text search — find guides, API references, and best practices by query

  • Store-kind lookup — get docs relevant to a specific store type (atom, map, computed, etc.)

  • Auto-detection — picks up docs from nanostores in your node_modules automatically

Requirements

Requirement

Version

Node.js

^20.0.0 || >=22.0.0

Required peer dependency (for static analysis):

npm install nanostores

Optional peer dependencies — install only if you use the corresponding file format:

Package

When needed

@vue/compiler-sfc

Vue SFC (.vue) file scanning

svelte

Svelte (.svelte) file scanning

@nanostores/logger

Runtime monitoring (attachMcpLogger)

Without these optional packages the server still works — it silently skips unsupported file types.

Installation

npm install -g nanostores-mcp
# or
pnpm add -g nanostores-mcp

Or run directly without installation:

npx nanostores-mcp

Configuration

Claude Desktop

Add to ~/Library/Application Support/Claude/claude_desktop_config.json (macOS) or %APPDATA%\Claude\claude_desktop_config.json (Windows):

{
	"mcpServers": {
		"nanostores": {
			"command": "npx",
			"args": ["-y", "nanostores-mcp"],
			"env": {
				"NANOSTORES_MCP_ROOT": "/path/to/your/project"
			}
		}
	}
}

VS Code

Requires GitHub Copilot extension (VS Code 1.99+). Create .vscode/mcp.json in your project:

{
	"servers": {
		"nanostores": {
			"type": "stdio",
			"command": "npx",
			"args": ["-y", "nanostores-mcp"]
		}
	}
}

Tools are available in Copilot's Agent mode (select "Agent" in the Copilot Chat dropdown).

Cursor

Create .cursor/mcp.json in your project root (or ~/.cursor/mcp.json for global):

{
	"mcpServers": {
		"nanostores": {
			"command": "npx",
			"args": ["-y", "nanostores-mcp"]
		}
	}
}

Zed

Add to your Zed settings.json:

{
	"context_servers": {
		"nanostores": {
			"command": "npx",
			"args": ["-y", "nanostores-mcp"],
			"env": {
				"NANOSTORES_MCP_ROOT": "/path/to/your/project"
			}
		}
	}
}

The server appears in Zed's Agent Panel settings.

Windsurf

Add to ~/.codeium/windsurf/mcp_config.json:

{
	"mcpServers": {
		"nanostores": {
			"command": "npx",
			"args": ["-y", "nanostores-mcp"],
			"env": {
				"NANOSTORES_MCP_ROOT": "/path/to/your/project"
			}
		}
	}
}

You can also open this file from the MCP icon in the Cascade panel → "Configure".

Claude Code

Add via CLI:

claude mcp add --transport stdio nanostores -- npx -y nanostores-mcp

Or create .mcp.json in your project root (shared with the team):

{
	"mcpServers": {
		"nanostores": {
			"command": "npx",
			"args": ["-y", "nanostores-mcp"],
			"env": {
				"NANOSTORES_MCP_ROOT": "/path/to/your/project"
			}
		}
	}
}

Environment Variables

Variable

Default

Description

NANOSTORES_MCP_ROOT

cwd

Project root path

NANOSTORES_MCP_ROOTS

Platform-delimited roots (: on Unix, ; on Windows) for multi-project setup

WORKSPACE_FOLDER

Alias for NANOSTORES_MCP_ROOT — set automatically by VS Code and some editors

WORKSPACE_FOLDER_PATHS

Alias for NANOSTORES_MCP_ROOTS — set automatically by some editors

NANOSTORES_MCP_LOGGER_ENABLED

true

Set to false or 0 to disable runtime event collection and the logger bridge

NANOSTORES_MCP_LOGGER_PORT

3999

HTTP port for logger bridge

NANOSTORES_MCP_LOGGER_HOST

127.0.0.1

Host to bind. Allowed values: 127.0.0.1, localhost, ::1

NANOSTORES_DOCS_ROOT

auto-detect

Path to documentation directory

NANOSTORES_DOCS_PATTERNS

**/*.md

Comma-separated glob patterns for docs

How the Project Root Is Resolved

The server picks workspace roots in priority order:

  1. Environment variables (highest priority) — NANOSTORES_MCP_ROOTS / NANOSTORES_MCP_ROOT / WORKSPACE_FOLDER_PATHS / WORKSPACE_FOLDER

  2. Client roots — roots reported by the MCP client via the roots/list capability (set automatically by some editors)

  3. Current working directoryprocess.cwd() used as fallback when neither env nor client roots are configured

When a tool is called without an explicit projectRoot argument the server uses the first configured root. In a multi-root setup always pass projectRoot to avoid ambiguity.

Quick Start

1. Static Analysis

Works out of the box — just point at your project and ask:

  • "Analyze my store architecture"

  • "Explain how nanostores is used in this project"

  • "Give me a summary of the $cart store"

  • "My stores changed — re-scan the project" ← the AI will force a fresh scan

Auto-detected from nanostores in your node_modules:

  • "How do I use computed stores?"

  • "Show me the docs for persistentAtom"

3. Runtime Monitoring (Optional)

Requires logger integration in your app. See Runtime Monitoring below.

  • "Which stores update most frequently?"

  • "Show me recent activity for $user"

  • "Give me an overall health report"

Verify Your Setup

Run these four tools in order to confirm everything is working:

nanostores_ping              → should return server status and logger bridge state
nanostores_scan_project      → should list your stores and subscribers
nanostores_docs_search       → should return documentation results (requires nanostores in node_modules)
nanostores_runtime_overview  → should return overview (or "no runtime data" if logger is disabled — that's fine)

If nanostores_scan_project returns zero stores, check that NANOSTORES_MCP_ROOT points to the correct project directory.

MCP Interface

MCP Resources

Resource

Description

nanostores://graph

Full dependency graph (text + Mermaid)

nanostores://store/{key}

Store details by name or id

nanostores://docs

Documentation index — all pages and tags

nanostores://docs/page/{id}

Full content of a documentation page

MCP Tools

Static Analysis

Tool

Description

nanostores_scan_project

Scan project for all stores, subscribers, and dependencies

nanostores_store_summary

Detailed summary of a specific store

nanostores_project_outline

High-level overview: store kinds, top directories, hub stores

nanostores_store_subgraph

BFS-expanded dependency neighborhood of a store

nanostores_store_impact

Downstream causal chain — what recomputes/re-renders if X changes

Runtime Monitoring

Tool

Description

nanostores_runtime_overview

Overall health report with statistics for all stores

nanostores_store_activity

Activity timeline for a specific store (filterable by kind/action)

nanostores_find_noisy_stores

Identify stores with high change frequency or error rates

nanostores_runtime_coverage

Compare static graph with runtime events to find coverage gaps

Documentation

Tool

Description

nanostores_docs_search

Search docs by query (full-text), storeKind (atom, map, computed, persistentAtom, etc.), or both. Optional: limit (default 10), tags

Use nanostores://docs/page/{id} resource to read the full content of pages returned by search.

Utilities

Tool

Description

nanostores_ping

Server health check and logger bridge status

nanostores_clear_cache

Clear project index cache to force rescan

MCP Prompts

Prompt

Parameters

Description

explain-project

focus (optional)

AI-guided explanation of your project's store architecture. focus narrows to a feature/domain (e.g. "cart", "auth")

explain-store

store_name (required)

Deep dive into a specific store's implementation and usage

debug-store

store_name (required)

Comprehensive analysis combining static + runtime data

debug-project-activity

Project-wide performance analysis and optimization

docs-how-to

task (required)

Step-by-step guidance for a Nanostores task, backed by docs (e.g. "How do I sync a map store to localStorage?")

Advanced Tool Arguments

Most tools accept these optional arguments that significantly change their behavior:

Argument

Type

Used in

Description

storeId

string

store_summary, store_subgraph, store_impact

Exact store identifier — format: store:src/stores.ts#$counterName. Takes priority over name when both are provided.

name

string

store_summary, store_subgraph, store_impact

Store name (e.g. "$user"). Used when storeId is not provided.

radius

number (0–10, default 2)

nanostores_store_subgraph

BFS hops around the store. 1 = direct deps only; 2 = deps of deps. Warning: on highly-connected hub stores (hub score > 5) radius ≥ 2 may return most of the project — start with 1.

projectRoot

string

most tools

Which project root to analyze in multi-root setups. Omit to use the first configured root. Always specify this in multi-root projects.

windowMs

number

store_activity, find_noisy_stores, runtime_overview

Look-back window in milliseconds (e.g. 60000 = last 60 s). Filters events to that time range.

kinds

string[]

nanostores_store_activity

Filter events by type. Values: "mount", "unmount", "change", "action-start", "action-end", "action-error".

actionName

string

nanostores_store_activity

Filter events to a specific action (e.g. "increment").

compact

boolean

scan_project, find_noisy_stores, runtime_overview

Return a compressed token-efficient table instead of full text. Useful for large projects to reduce context usage.

Runtime Monitoring

For runtime analysis, integrate the MCP Logger client into your application.

1. Install in your app and enable the logger bridge:

npm install nanostores-mcp

The logger bridge starts automatically — no extra config needed. To disable it, set NANOSTORES_MCP_LOGGER_ENABLED=false in your MCP server config.

2. Define stores with logger attached (src/stores.ts):

import { atom, map, computed } from "nanostores";
import { initMcpLogger, attachMcpLogger } from "nanostores-mcp/mcpLogger";

// Automatically disabled in production (checks NODE_ENV / import.meta.env.DEV)
initMcpLogger();

// Stores
export const $count = atom(0);
export const $user = map({ name: "", role: "guest" });
export const $greeting = computed($user, user => `Hello, ${user.name}`);

// Attach logger — each call returns a cleanup function
attachMcpLogger($count, "$count");
attachMcpLogger($user, "$user");
attachMcpLogger($greeting, "$greeting");

3. Use stores normally — events (mount, unmount, change, actions) are captured automatically and batched to the MCP server every second.

4. Ask your AI assistant:

  • "Which stores change most frequently?"nanostores_find_noisy_stores

  • "Show me recent activity for $user"nanostores_store_activity

  • "Give me an overall health report"nanostores_runtime_overview

Logger Options

initMcpLogger({
	url: "http://127.0.0.1:3999/nanostores-logger", // default; change if using a custom port
	batchMs: 1000, // default; lower for faster delivery (e.g. 200)
	projectRoot: "/absolute/path/to/project", // link runtime events with static analysis

	// Mask sensitive data — return null to skip event entirely
	maskEvent: event => {
		if (event.storeName === "authToken") return null;
		return event;
	},
});

Flush Before Shutdown

import { getMcpLogger } from "nanostores-mcp/mcpLogger";

window.addEventListener("beforeunload", async () => {
	await getMcpLogger()?.forceFlush();
});

Reading Results

nanostores_runtime_overview health summary

The overview groups stores into three categories:

  • Top active stores — sorted by total event count (changes + actions). A store that appears here with hundreds of changes in seconds may be a performance concern.

  • Error-prone stores — stores with action-error events. High error counts indicate failing async actions.

  • Unmounted stores — stores seen at mount but never unmounted. May indicate memory leaks.

nanostores_runtime_coverage

Compares your static store graph against observed runtime events:

Term

Meaning

static-only

Store found by AST scan but no runtime events observed. Possible dead code, deferred initialization, or missing attachMcpLogger call.

runtime-only

Events received for a store not found by the scanner. Common for dynamically-created stores, factory patterns, or stores in node_modules.

Coverage by kind

E.g. atom: 3/5 (60%) — 3 out of 5 atom stores received runtime events. 0% for a kind usually means attachMcpLogger was not called for those stores.

nanostores_find_noisy_stores

Returns stores ranked by total activity (changes + actions combined) within the windowMs period. A store is considered "noisy" when its change frequency is disproportionately high relative to visible UI updates — use this to find re-render hotspots or thrashing computed chains.

Privacy & Security

The runtime logger is designed to stay on your local machine:

  • Loopback-only binding — the HTTP bridge accepts connections exclusively from 127.0.0.1, localhost, or ::1. Binding to 0.0.0.0 is explicitly blocked. Data never leaves your machine.

  • What is transmitted — from your app to the MCP server over localhost: store name, timestamp, event kind, and optionally value snapshots (truncated to 200 characters). Nothing is sent to Anthropic or any third party.

  • Nothing is persisted — events are held in a ring buffer (5 000 events max) in process memory and discarded when the server restarts.

  • Mask sensitive data — use maskEvent to filter or redact events client-side before they are batched and sent:

initMcpLogger({
	maskEvent: event => {
		if (event.storeName === "$authToken") return null; // drop entirely
		if (event.storeName === "$paymentInfo") return { ...event, newValue: undefined }; // strip value
		return event;
	},
});
  • CORS — the bridge rejects cross-origin requests from non-loopback origins.

Example Queries

Ask your AI assistant natural language questions:

Static Analysis:

  • "Analyze my store architecture for potential issues"

  • "What happens when $user changes? Show subscribers and derived stores"

Runtime Debugging:

  • "Which stores update most frequently?"

  • "Are there stores declared in code but never used at runtime?"

  • "Debug the $user store — combine static analysis with runtime behavior"

With Playwright MCP:

  • "Open my app in the browser, interact with it, and analyze which stores cause the most recalculations"

Documentation:

  • "How do I use computed stores?"

  • "Show me best practices for persistent stores"

Architecture

┌──────────────────────┐
│   Your Application   │
│                      │
│  @nanostores/logger  │
│        events        │
└──────────┬───────────┘
           │ HTTP POST (localhost:3999)
           ▼
┌──────────────────────┐
│   nanostores-mcp     │
│                      │
│   ┌──────────────┐   │
│   │ Logger Bridge │   │ ← HTTP server for runtime events
│   └──────┬───────┘   │
│          ▼           │
│   ┌──────────────┐   │
│   │ Event Store  │   │ ← Ring buffer (5000 events) + stats
│   └──────┬───────┘   │
│          │           │
│   ┌──────┴───────┐   │
│   │  AST Scanner │   │ ← ts-morph static analysis
│   └──────┬───────┘   │
│          │           │
│   ┌──────┴───────┐   │
│   │  Docs Index  │   │ ← Auto-detected from node_modules
│   └──────┬───────┘   │
│          │           │
│   ┌──────┴───────┐   │
│   │ MCP Interface│   │ ← Resources, Tools, Prompts
│   └──────────────┘   │
└──────────┬───────────┘
           │ MCP Protocol (stdio)
           ▼
┌──────────────────────┐
│    LLM Client        │
│ (Claude, VS Code, …) │
└──────────────────────┘

Limitations & Caveats

Multi-root: same store name in multiple projects

In multi-root mode a store named $user can exist in two different projects. The runtime event store uses a composite key (projectRoot + storeName) to keep them separate, but summary views may show the same name twice with no project label. Always specify projectRoot when querying tools in a multi-root setup to get unambiguous results.

Static analysis only covers discovered files

The AST scanner follows TypeScript/JavaScript imports from your project root. Stores created dynamically at runtime, generated by factories, or living in node_modules will not appear in static results — they may show up as "runtime-only" in coverage reports.

Vue and Svelte parsing requires optional dependencies

If @vue/compiler-sfc or svelte are not installed, .vue / .svelte files are silently skipped during scanning. Install them as dev dependencies if you want full coverage for those file types.

Event ring buffer is capped at 5 000 events

Older events are dropped when the buffer is full. For high-frequency stores use windowMs to narrow your queries to recent data, or lower batchMs in initMcpLogger to deliver events more frequently and reduce the chance of buffer overflow during bursts.

radius on hub stores can be very large

Stores with many dependencies (hub score > 5) can return most of the project graph at radius=2. Start with radius=1 and increase only if you need broader context.

Development

git clone https://github.com/Valyay/nanostores-mcp.git
cd nanostores-mcp
pnpm install

pnpm dev          # Run dev server
pnpm build        # TypeScript compile
pnpm test         # Run vitest
pnpm lint         # ESLint
pnpm check        # All checks: lint + format + test + build

# Test with MCP Inspector
npx @modelcontextprotocol/inspector pnpm run dev

Troubleshooting

Logger not receiving events:

  1. Use the ping tool to verify logger bridge is enabled and running

  2. Check browser console for [nanostores-mcp] warnings about connection issues

  3. Confirm the port matches between server (NANOSTORES_MCP_LOGGER_PORT) and client URL

  4. Test with a simple atom store to verify events flow

Port conflicts:

# Change server port
NANOSTORES_MCP_LOGGER_PORT=4000 npx nanostores-mcp

# Update client
initMcpLogger({ url: "http://127.0.0.1:4000/nanostores-logger" });

TypeScript errors:

// Import from the mcpLogger subpath export
import { initMcpLogger, attachMcpLogger } from "nanostores-mcp/mcpLogger";

Documentation not found:

  • The server auto-detects docs from nanostores in your node_modules

  • Make sure nanostores is installed: npm install nanostores

  • Or set NANOSTORES_DOCS_ROOT to point at a docs directory manually

Nanostores ecosystem:

MCP:

License

MIT

Contributing

Contributions are welcome! Please open an issue or PR.

Available Tools

12 tools
nanostores_clear_cacheClear project analysis cacheA
Idempotent

Use this when scan results seem stale or after making file changes that the server may not have detected. Clears the cached project index so the next nanostores_scan_project call performs a fresh scan.

ParametersJSON Schema
NameRequiredDescriptionDefault
rootUriNoWorkspace root to clear cache for. Omit to clear all roots.

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already provide readOnlyHint=false, destructiveHint=false, idempotentHint=true, and openWorldHint=false. The description adds valuable context about the tool's purpose (clearing cached index to enable fresh scans) and when to use it, which complements the annotations. However, it doesn't mention potential side effects like temporary performance impact during re-scanning.

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

Conciseness5/5

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

Two sentences with zero waste. The first sentence provides usage context, the second explains the action and consequence. Every word serves a purpose, and the information is front-loaded with the primary use case.

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

Completeness4/5

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

For a single-parameter tool with comprehensive annotations and no output schema, the description provides excellent context about when and why to use it. It could slightly improve by mentioning what 'clears the cached project index' entails operationally, but overall it's highly complete for this tool's complexity level.

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

Parameters3/5

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

Schema description coverage is 100% with the parameter well-documented. The description doesn't add any parameter-specific information beyond what's in the schema, which already explains the optional rootUri parameter and its behavior when omitted. This meets the baseline expectation for high schema coverage.

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 clearly states the verb ('clears') and resource ('cached project index'), specifying it's for the project analysis cache. It distinguishes from siblings by explicitly mentioning nanostores_scan_project as the complementary operation that will perform a fresh scan after cache clearance.

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

Usage Guidelines5/5

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

The description provides explicit when-to-use guidance: 'when scan results seem stale or after making file changes that the server may not have detected.' It also specifies the alternative action (nanostores_scan_project) that should follow, creating clear operational sequencing.

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

nanostores_find_noisy_storesFind noisy storesA
Read-onlyIdempotent

Use this when investigating performance issues or excessive re-renders. Returns stores ranked by activity — frequent changes, many action calls — to pinpoint bottlenecks. Example: {limit: 10} or {windowMs: 30000, compact: true}.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoNumber of stores to return
windowMsNoTime window in milliseconds (from now back)
compactNoReturn TOON-encoded compact table for lower token cost

Output Schema

ParametersJSON Schema
NameRequiredDescription
storesYes
summaryYes

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already indicate readOnlyHint=true and idempotentHint=true, so the agent knows this is a safe, repeatable read operation. The description adds valuable context beyond annotations by explaining that it returns stores 'ranked by activity' based on 'frequent changes, many action calls,' which clarifies the behavioral output and purpose, though it doesn't mention rate limits or authentication needs.

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

Conciseness5/5

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

The description is front-loaded with the core purpose and usage guidelines in the first sentence, followed by a concise example. Every sentence earns its place by providing essential information without redundancy, making it highly efficient and well-structured.

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?

Given the tool's complexity (diagnostic analysis), rich annotations (readOnlyHint, idempotentHint), and the presence of an output schema, the description is complete enough. It clearly explains the tool's role in performance investigation, distinguishes it from siblings, and provides usage examples, covering all necessary context without needing to detail return values (handled by output schema).

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

Parameters3/5

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

Schema description coverage is 100%, so the schema fully documents the parameters (limit, windowMs, compact). The description provides example usage with {limit: 10} and {windowMs: 30000, compact: true}, which adds practical context but doesn't add semantic meaning beyond what the schema already specifies. This meets the baseline of 3 for high schema coverage.

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 clearly states the tool's purpose with specific verbs ('find', 'returns', 'pinpoint') and resources ('stores ranked by activity'), explicitly mentioning 'frequent changes, many action calls' to distinguish it from sibling tools like nanostores_store_activity or nanostores_store_summary which might focus on different aspects of store behavior.

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

Usage Guidelines5/5

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

The description provides explicit guidance on when to use this tool: 'when investigating performance issues or excessive re-renders.' It also distinguishes it from alternatives by specifying it returns stores 'ranked by activity' to 'pinpoint bottlenecks,' helping differentiate from other sibling tools that might serve different diagnostic purposes.

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

nanostores_pingPing Nanostores MCP serverA
Read-onlyIdempotent

Use this when you need to verify the MCP server is alive or check whether the runtime logger bridge is connected.

ParametersJSON Schema
NameRequiredDescriptionDefault
messageNopong

Output Schema

ParametersJSON Schema
NameRequiredDescription
messageYes
loggerBridgeNo

TDQS

A4.4/5.0
Behavior4/5

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

Annotations indicate readOnlyHint=true, idempotentHint=true, and openWorldHint=false, covering safety and idempotency. The description adds value by specifying the diagnostic context (verifying aliveness and logger bridge connectivity), which isn't captured in annotations. It doesn't contradict annotations and provides useful behavioral context beyond them, though it could mention expected output or error conditions.

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

Conciseness5/5

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

The description is a single, efficient sentence that directly states the usage context. It's front-loaded with clear intent, has no redundant information, and every word earns its place. Perfectly concise for a simple diagnostic tool.

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?

Given the tool's low complexity (simple ping with one optional parameter), rich annotations (readOnly, idempotent, closed-world), and the presence of an output schema (which handles return values), the description is complete enough. It clearly states the diagnostic purpose without needing to explain parameters or behavioral details already covered elsewhere.

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

Parameters4/5

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

There is 1 parameter with 0% schema description coverage (no description in schema). The tool description doesn't mention parameters at all, but since there are 0 required parameters and a default is provided in the schema, the baseline is high. The description compensates by clearly stating the tool's purpose, making parameter details less critical for this simple ping tool.

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

Purpose4/5

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

The description clearly states the tool's purpose as verifying server aliveness and checking logger bridge connectivity, which is specific (verb+resource). However, it doesn't distinguish this from potential sibling tools that might also test connectivity or provide health checks, though none are explicitly listed among siblings. The purpose is unambiguous but lacks sibling differentiation.

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

Usage Guidelines5/5

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

The description explicitly states when to use this tool: 'when you need to verify the MCP server is alive or check whether the runtime logger bridge is connected.' This provides clear context for usage without alternatives needed, as it's a diagnostic tool with a specific, narrow purpose. No misleading or vague guidance is present.

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

nanostores_project_outlineGet project outlineA
Read-onlyIdempotent

Use this for a quick overview of Nanostores usage in the project — store kind distribution, top directories, and hub stores ranked by connectivity. Returns a compact summary instead of full store/subscriber lists (same scan data, smaller response). Use nanostores_scan_project when you need the complete list of stores and relations.

ParametersJSON Schema
NameRequiredDescriptionDefault
projectRootNoProject root path (uses default if omitted)

Output Schema

ParametersJSON Schema
NameRequiredDescription
rootDirYes
totalsYes
storeKindsYes
topDirsYes
hubsYes
unreferencedStoresYes
coOccurringPairsYes
topSemanticAnomaliesYes
topBlindSpotsYes

TDQS

A4.5/5.0
Behavior4/5

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

The description adds valuable behavioral context beyond what annotations provide. While annotations indicate read-only, idempotent, and closed-world behavior, the description reveals that this tool returns 'a compact summary instead of full store/subscriber lists' and uses 'same scan data, smaller response.' This provides important implementation details about response size and data source that aren't captured in annotations.

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

Conciseness5/5

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

The description is perfectly concise and well-structured. Two sentences efficiently convey the tool's purpose, what it returns, when to use it, and when to use the alternative. Every word serves a clear purpose with no redundancy or unnecessary elaboration.

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?

Given the tool's moderate complexity, comprehensive annotations (readOnlyHint, idempotentHint, openWorldHint), and the presence of an output schema, the description provides complete contextual information. It explains the tool's purpose, differentiates it from alternatives, and describes the response format, which is sufficient since the output schema will handle return value details.

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

Parameters3/5

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

With 100% schema description coverage and only one optional parameter, the schema already fully documents the 'projectRoot' parameter. The description doesn't add any additional parameter semantics beyond what's in the schema, so it meets the baseline expectation but doesn't provide extra value in this dimension.

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 clearly states the tool's purpose: providing a 'quick overview of Nanostores usage in the project' with specific content elements (store kind distribution, top directories, hub stores ranked by connectivity). It explicitly distinguishes this from its sibling 'nanostores_scan_project' which provides complete lists, making the distinction unambiguous.

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

Usage Guidelines5/5

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

The description provides explicit guidance on when to use this tool versus alternatives: 'Use this for a quick overview...' and 'Use nanostores_scan_project when you need the complete list of stores and relations.' This clearly defines the use case context and names the specific alternative tool for different needs.

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

nanostores_runtime_coverageRuntime coverage reportA
Read-onlyIdempotent

Compare static analysis graph with runtime event data to find stores declared in the static graph but not observed in this runtime session, and stores seen at runtime but absent from the static graph (dynamic or unscanned). Use after running the app to verify instrumentation completeness. Example: {} or {projectRoot: "/path/to/project"}.

ParametersJSON Schema
NameRequiredDescriptionDefault
projectRootNoProject root path (uses first configured root if omitted)

Output Schema

ParametersJSON Schema
NameRequiredDescription
summaryYes
reportYes

TDQS

A4.3/5.0
Behavior4/5

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

Annotations indicate read-only and idempotent operations, which the description aligns with by implying analysis without mutation. The description adds valuable context about the tool's purpose (comparing static and runtime data) and timing ('after running the app'), which annotations do not cover, though it lacks details on rate limits or specific output behavior.

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

Conciseness5/5

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

The description is front-loaded with the core purpose, followed by usage guidance and an example, all in two efficient sentences with no redundant information, making it highly concise and well-structured.

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?

Given the tool's complexity (comparing static and runtime data), the presence of annotations (readOnlyHint, idempotentHint) and an output schema, the description adequately explains the tool's purpose and usage context without needing to detail return values or behavioral traits already covered elsewhere.

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

Parameters3/5

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

Schema description coverage is 100%, so the parameter 'projectRoot' is fully documented in the schema. The description adds minimal extra context with an example but does not provide significant additional meaning beyond what the schema already specifies.

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 clearly states the tool's purpose with specific verbs ('compare', 'find') and resources ('static analysis graph', 'runtime event data'), distinguishing it from siblings by focusing on coverage verification rather than scanning, searching, or analyzing stores directly.

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 provides clear context for when to use the tool ('Use after running the app to verify instrumentation completeness'), but it does not explicitly state when not to use it or name specific alternatives among the sibling tools for different scenarios.

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

nanostores_runtime_overviewGet runtime overviewA
Read-onlyIdempotent

Use this when you want a high-level health check of the running app's state management. Returns active stores, error-prone stores, unused stores, and activity patterns. Example: {} or {windowMs: 60000, compact: true}.

ParametersJSON Schema
NameRequiredDescriptionDefault
windowMsNoTime window in milliseconds (from now back)
compactNoReturn TOON-encoded compact table for lower token cost

Output Schema

ParametersJSON Schema
NameRequiredDescription
summaryYes
statsYes
noisyStoresYes
errorProneStoresYes
unmountedStoresYes

TDQS

A3.8/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true and idempotentHint=true, so the agent knows this is a safe, repeatable read operation. The description adds valuable context about what the tool returns (health check data types) and mentions the 'compact' parameter's purpose for 'lower token cost,' which isn't covered by annotations. No contradiction with annotations exists.

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

Conciseness5/5

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

The description is efficiently structured in two sentences: the first states the purpose and return data, the second provides parameter examples. Every sentence adds value without redundancy, and it's appropriately front-loaded with the core functionality.

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

Completeness4/5

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

Given the tool's moderate complexity (diagnostic read operation), rich annotations (readOnlyHint, idempotentHint), and the presence of an output schema, the description is reasonably complete. It covers the tool's purpose and key return aspects, though it could benefit from more explicit differentiation from sibling tools to fully guide usage.

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

Parameters3/5

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

Schema description coverage is 100%, so the schema fully documents both parameters (windowMs, compact). The description adds minimal value by providing example parameter structures ({}, {windowMs: 60000, compact: true}) and noting the compact parameter reduces token cost, but doesn't explain parameter interactions or default behaviors beyond what the schema provides.

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

Purpose4/5

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

The description clearly states the tool's purpose as providing a 'high-level health check of the running app's state management' and lists specific return data (active stores, error-prone stores, unused stores, activity patterns). It distinguishes from some siblings like 'nanostores_ping' (basic connectivity) but doesn't explicitly differentiate from similar diagnostic tools like 'nanostores_store_summary' or 'nanostores_runtime_coverage'.

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

Usage Guidelines3/5

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

The description provides some guidance with 'Use this when you want a high-level health check' and gives parameter examples, but it doesn't explicitly state when to choose this tool over similar siblings (e.g., 'nanostores_store_summary' or 'nanostores_runtime_coverage'). The context is implied rather than explicitly contrasted with alternatives.

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

nanostores_scan_projectScan project for Nanostores usageA
Read-onlyIdempotent

Returns the complete store/subscriber/relation index for the project. Use compact:true for a token-efficient directory-level overview (store counts by folder). Use the full mode (default) when you need to iterate over every entity or build a complete picture. Example: {compact: true} for directory overview, {force: true} to bypass cache.

ParametersJSON Schema
NameRequiredDescriptionDefault
rootUriNo
forceNoForce a fresh scan, bypassing the cache.
compactNoReturn a compact directory-level summary instead of full store/subscriber lists. Use when you need a token-efficient overview of where stores live, not individual store details.

Output Schema

ParametersJSON Schema
NameRequiredDescription
rootYes
filesScannedYes
storesNo
subscribersNo
mutatorsNo
relationsNo
totalsNo
byDirNo
errorsNo

TDQS

A4.7/5.0
Behavior4/5

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

Annotations indicate read-only and idempotent operations, which the description does not contradict. The description adds valuable context beyond annotations by explaining caching behavior ('bypass cache' with force parameter) and output variations (compact vs. full modes), enhancing the agent's understanding of how the tool behaves in different scenarios.

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

Conciseness5/5

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

The description is front-loaded with the core purpose, followed by concise usage guidelines and examples. Every sentence adds value—no redundancy or filler—making it efficient for quick comprehension by an AI agent while maintaining clarity.

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?

Given the tool's moderate complexity, rich annotations (readOnlyHint, idempotentHint), and the presence of an output schema, the description is complete. It covers purpose, usage scenarios, and parameter nuances without needing to detail return values, providing all necessary context for effective tool selection and invocation.

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

Parameters4/5

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

With 67% schema description coverage, the description compensates by providing practical semantics: it explains when to use compact mode ('for a token-efficient directory-level overview') and force parameter ('to bypass cache'), adding meaning beyond the schema's basic descriptions. However, it does not address rootUri, leaving a minor gap in parameter context.

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 clearly states the specific action ('Returns the complete store/subscriber/relation index') and resource ('for the project'), distinguishing it from siblings like nanostores_project_outline or nanostores_runtime_overview by focusing on indexing rather than outlining or runtime analysis. It explicitly mentions what is returned, making the purpose unambiguous.

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

Usage Guidelines5/5

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

The description provides explicit guidance on when to use compact mode ('for a token-efficient directory-level overview') versus full mode ('when you need to iterate over every entity or build a complete picture'), and includes an example for context. It clearly differentiates use cases, helping the agent choose appropriately without needing to infer from sibling tools.

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

nanostores_store_activityGet store runtime activityA
Read-onlyIdempotent

Use this when debugging a specific store's runtime behavior — why it updates too often, what actions trigger changes, or whether it emits errors. Returns recent events, change frequency, action calls, and errors. Omit storeName to get activity across all stores. Example: {storeName: "$cart", kinds: ["change", "action-error"]} or {limit: 20, windowMs: 60000}.

ParametersJSON Schema
NameRequiredDescriptionDefault
storeNameNoStore name to query (optional)
limitNoMax events to return
windowMsNoTime window in milliseconds (from now back)
projectRootNoProject root path to link runtime data with static analysis
kindsNoFilter events by kind(s)
actionNameNoFilter events by action name

Output Schema

ParametersJSON Schema
NameRequiredDescription
storeNameNo
statsYes
eventsYes
summaryYes

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true and idempotentHint=true, indicating safe, repeatable read operations. The description adds valuable context beyond this by specifying the return content ('recent events, change frequency, action calls, and errors'), debugging use cases, and optional storeName behavior, though it doesn't mention rate limits or auth needs, which keeps it from a perfect score.

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

Conciseness5/5

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

The description is front-loaded with the core purpose, followed by usage guidance and examples, all in three concise sentences with zero wasted words. Each sentence adds specific value, making it efficient and well-structured for quick comprehension.

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?

Given the tool's debugging complexity, rich annotations (readOnlyHint, idempotentHint), 100% schema coverage, and the presence of an output schema, the description is complete enough. It covers purpose, usage, behavioral context, and examples, leaving no critical gaps for an agent to invoke the tool effectively.

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

Parameters3/5

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

Schema description coverage is 100%, so the schema fully documents all 6 parameters. The description adds minimal parameter semantics beyond the schema, such as implying storeName's optionality and providing example usage, but doesn't explain parameter interactions or deeper meanings, aligning with the baseline for high schema coverage.

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 clearly states the tool's purpose with specific verbs ('debugging a specific store's runtime behavior') and resources ('store runtime activity'), distinguishing it from siblings like nanostores_find_noisy_stores or nanostores_store_summary by focusing on detailed event-level debugging rather than high-level summaries or noise detection.

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

Usage Guidelines5/5

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

The description provides explicit guidance on when to use this tool ('when debugging a specific store's runtime behavior — why it updates too often, what actions trigger changes, or whether it emits errors'), includes an alternative usage pattern ('Omit storeName to get activity across all stores'), and offers concrete examples, making it clear how to apply it in different scenarios.

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

nanostores_store_impactGet store impact chainA
Read-onlyIdempotent

When you need to trace what recomputes if X changes, call this once — not nanostores_store_summary on each downstream store. Returns the full ordered downstream chain in a single response: computed stores that depend on X at hop 1, their dependents at hop 2, and so on. Subscribers appear at the same hop as the store they react to. Use nanostores_store_subgraph instead when you also need upstream ancestors (BFS in both directions). Example: {name: "$isLoggedIn"} returns every computed store and subscriber that recomputes when $isLoggedIn changes, ordered by distance.

ParametersJSON Schema
NameRequiredDescriptionDefault
storeIdNoExact store id. If provided, takes priority.
nameNoStore name. Used if storeId is not provided.
projectRootNoProject root path (uses default if omitted)

Output Schema

ParametersJSON Schema
NameRequiredDescription
sourceStoreIdYes
sourceNameNo
hopsYes
summaryYes

TDQS

A4.5/5.0
Behavior4/5

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

The description adds valuable behavioral context beyond what annotations provide. While annotations indicate read-only and idempotent operations, the description explains that this tool returns 'the full ordered downstream chain in a single response' and clarifies how subscribers are included ('Subscribers appear at the same hop as the store they react to'). This provides important implementation details not captured in annotations.

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

Conciseness5/5

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

The description is efficiently structured with zero wasted sentences. It begins with the primary use case, explains the return format, provides sibling tool differentiation, and includes a concrete example - all in four tightly focused sentences that each serve a distinct purpose.

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?

Given the tool's complexity and the presence of both comprehensive annotations and an output schema, the description provides complete contextual information. It explains the tool's purpose, when to use it versus alternatives, the structure of the response, and includes a practical example - covering all necessary aspects for effective tool selection and invocation.

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

Parameters3/5

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

With 100% schema description coverage, the input schema already documents all three parameters thoroughly. The description doesn't add significant parameter semantics beyond what's in the schema, though it does provide an example using the 'name' parameter. This meets the baseline expectation when schema coverage is complete.

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 clearly states the tool's purpose: 'trace what recomputes if X changes' and 'Returns the full ordered downstream chain in a single response.' It specifically distinguishes this tool from sibling tools like nanostores_store_summary and nanostores_store_subgraph, providing explicit differentiation.

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

Usage Guidelines5/5

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

The description provides explicit guidance on when to use this tool ('call this once — not nanostores_store_summary on each downstream store') and when to use an alternative ('Use nanostores_store_subgraph instead when you also need upstream ancestors'). It also includes a practical example to illustrate proper usage.

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

nanostores_store_subgraphGet store subgraphA
Read-onlyIdempotent

If your question is 'what recomputes downstream when X changes?', use nanostores_store_impact instead — it gives the ordered causal chain in one call. Use this tool only when you need both directions: upstream sources AND downstream dependents together. Returns the BFS neighborhood within a configurable radius (default 2). Start with radius=1; increase only when you need wider structural context. On highly connected hub stores (score>5 in project_outline) radius=2+ may return most of the project. Example: {name: "$cart", radius: 1} or {storeId: "store:src/stores.ts#$cart", radius: 2}.

ParametersJSON Schema
NameRequiredDescriptionDefault
storeIdNoExact store id. If provided, takes priority.
nameNoStore name. Used if storeId is not provided.
radiusNoBFS radius around the store (default 2)
projectRootNoProject root path (uses default if omitted)

Output Schema

ParametersJSON Schema
NameRequiredDescription
centerStoreIdYes
radiusYes
nodesYes
edgesYes
summaryNo
warningNo

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, and openWorldHint=false. The description adds valuable behavioral context beyond these annotations: it explains the BFS algorithm with configurable radius, provides a practical starting point (radius=1), warns about performance implications on highly connected hub stores, and gives concrete usage examples. No contradictions with annotations exist.

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

Conciseness5/5

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

The description is efficiently structured with zero wasted sentences. It opens with clear usage differentiation, states the core purpose, explains key behavioral aspects (radius usage and hub store considerations), and provides concrete examples. Every sentence adds value and is appropriately front-loaded with the most important guidance.

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?

Given that annotations cover safety properties (read-only, idempotent), schema coverage is 100%, and an output schema exists (so return values don't need explanation), the description provides excellent contextual completeness. It addresses when to use the tool, behavioral nuances, practical usage tips, and examples - exactly what's needed beyond the structured data.

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

Parameters3/5

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

Schema description coverage is 100%, so the schema already fully documents all four parameters. The description adds some semantic context about the radius parameter (recommending starting with radius=1 and explaining when to increase it), but doesn't provide additional meaning for storeId, name, or projectRoot beyond what's in their schema descriptions. This meets the baseline expectation when schema coverage is complete.

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 clearly states the tool's purpose: to get both upstream sources AND downstream dependents together (the store subgraph) using BFS within a configurable radius. It specifically distinguishes this from the sibling tool nanostores_store_impact, which provides only the downstream causal chain. The verb 'get' combined with the resource 'store subgraph' is specific and well-differentiated.

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

Usage Guidelines5/5

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

The description provides explicit guidance on when to use this tool versus alternatives. It directly states: 'If your question is "what recomputes downstream when X changes?", use nanostores_store_impact instead' and 'Use this tool only when you need both directions: upstream sources AND downstream dependents together.' This includes clear when-not-to-use criteria and names the alternative tool.

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

nanostores_store_summarySummarize a Nanostores storeA
Read-onlyIdempotent

Use this when you need details about a specific store — its kind, file location, direct subscribers, and first-level derived relations. Accepts store id or name. For multi-hop dependency chains use nanostores_store_subgraph instead. Example: {name: "$counter"} or {storeId: "store:src/stores.ts#$counter"}.

ParametersJSON Schema
NameRequiredDescriptionDefault
storeIdNoExact store id. If provided, takes priority.
nameNoStore name. Used if storeId is not provided.
fileNoOptional relative file path to disambiguate store name.
rootUriNoProject root URI or path for multi-root setups; defaults to first root.

Output Schema

ParametersJSON Schema
NameRequiredDescription
storeYes
resolutionYes
subscribersYes
derivesFromYes
derivedDependentsYes

TDQS

A4.5/5.0
Behavior4/5

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

The annotations already provide readOnlyHint=true, idempotentHint=true, and openWorldHint=false, which cover safety and idempotency. The description adds valuable context about what information is returned (kind, file location, direct subscribers, first-level derived relations) and provides a concrete example of parameter usage, which enhances understanding beyond the annotations.

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

Conciseness5/5

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

The description is efficiently structured with three sentences: the first states the purpose and scope, the second provides usage guidance and alternative, and the third gives a concrete example. Every sentence adds value with zero wasted words, making it easy to parse and understand.

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?

Given that annotations cover safety and idempotency, schema coverage is 100%, and an output schema exists, the description provides complete contextual information. It explains what the tool returns, when to use it, and provides an example, making it fully adequate for an agent to understand and invoke this tool correctly.

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

Parameters3/5

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

Schema description coverage is 100%, so the schema already fully documents all parameters. The description adds some semantic context by explaining that it accepts 'store id or name' and providing an example, but doesn't add significant meaning beyond what's in the schema. This meets the baseline of 3 for high schema coverage.

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 clearly states the tool's purpose: to provide details about a specific store including its kind, file location, direct subscribers, and first-level derived relations. It uses specific verbs ('summarize') and resources ('store'), and distinguishes itself from the sibling tool nanostores_store_subgraph by specifying it's for single-level details rather than multi-hop dependency chains.

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

Usage Guidelines5/5

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

The description provides explicit guidance on when to use this tool versus alternatives: 'Use this when you need details about a specific store' and 'For multi-hop dependency chains use nanostores_store_subgraph instead.' It clearly defines the context and provides a named alternative for different use cases.

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. Dates show when Glama detected each change.

  1. 12 tool updatesv0.1.1
    • First observednanostores_clear_cache
    • First observednanostores_docs_search
    • First observednanostores_find_noisy_stores
    • First observednanostores_ping
    • First observednanostores_project_outline
    • First observednanostores_runtime_coverage
    • First observednanostores_runtime_overview
    • First observednanostores_scan_project
    • First observednanostores_store_activity
    • First observednanostores_store_impact
    • First observednanostores_store_subgraph
    • First observednanostores_store_summary

TDQS

A4.4/5.0
Disambiguation5/5

Each tool has a clearly distinct purpose with no ambiguity; for example, nanostores_store_impact is specifically for downstream dependency chains, while nanostores_store_subgraph handles bidirectional neighborhoods, and nanostores_scan_project focuses on project indexing versus nanostores_project_outline for summaries. The descriptions explicitly differentiate overlapping tools like nanostores_store_impact and nanostores_store_subgraph, preventing misselection.

Naming Consistency5/5

All tools follow a consistent snake_case pattern with a 'nanostores_' prefix and descriptive verb_noun combinations (e.g., nanostores_clear_cache, nanostores_docs_search). The naming is predictable and uniform across all 12 tools, making them easily identifiable and readable without any deviations in style.

Tool Count5/5

With 12 tools, the count is well-scoped for the server's purpose of analyzing and debugging Nanostores projects. Each tool serves a specific role in static analysis, runtime monitoring, documentation, and performance tuning, covering a comprehensive workflow without being excessive or insufficient for the domain.

Completeness5/5

The tool set provides complete coverage for the Nanostores domain, including project scanning (nanostores_scan_project), runtime health checks (nanostores_runtime_overview), debugging (nanostores_store_activity), dependency analysis (nanostores_store_impact), documentation (nanostores_docs_search), and performance optimization (nanostores_find_noisy_stores). There are no obvious gaps; agents can handle all core workflows from setup to troubleshooting.

Maintenance

ActivityInactive
ResponsivenessSyncing

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

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

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    D
    maintenance
    MCP server that analyzes TypeScript/JavaScript codebases via AST parsing and dependency graph tracing to identify affected tests, detect dead code, circular dependencies, and trace import chains, enabling AI agents to run only relevant tests.
    15
    49
    MIT
  • F
    license
    Not graded
    quality
    B
    maintenance
    MCP server for static code analysis using AST parsing and linters, providing tools to detect syntax errors, type issues, typos, and incorrect variable usage across multiple languages. It supports headless linting with tools like ast_check, lint_check, and health.
    -

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/Valyay/nanostores-mcp'

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