Skip to main content
Glama
Pharaoh-so

Pharaoh - Your AI breaks things it can't see

by Pharaoh-so

@pharaoh-so/mcp

npm version license node pharaoh MCP server

MCP proxy for Pharaoh — maps codebases into queryable knowledge graphs for AI agents.

Pharaoh gives AI coding assistants a complete architectural map of your codebase: every function, dependency, module, and connection. Instead of reading files one at a time, your AI agent queries the knowledge graph and gets instant answers about blast radius, unused code, dependency chains, and more.

This package enables Claude Code to connect to Pharaoh in headless environments (VPS, SSH, containers, CI) where a browser isn't available for OAuth. It acts as a stdio-to-SSE proxy, presenting itself as a local MCP server while relaying all communication to the remote Pharaoh server.

Quick Start

Step 1 — Authenticate

Run the proxy directly to trigger the device authorization flow:

npx @pharaoh-so/mcp

This displays a device code and a URL. Open the URL on any device (phone, laptop, tablet) and enter the code to authorize. Credentials are saved to ~/.pharaoh/credentials.json and remain valid for 7 days, with automatic re-authorization when they expire.

Step 2 — Add to Claude Code

npx @pharaoh-so/mcp

Verify the connection:

claude mcp list

You should see pharaoh listed as a stdio server.

Switching from SSE

If you previously added Pharaoh as an SSE server, remove it first:

claude mcp remove pharaoh
npx @pharaoh-so/mcp

Related MCP server: Context7 MCP

How It Works

Claude Code ← stdio → @pharaoh-so/mcp ← SSE/HTTP → mcp.pharaoh.so

The proxy implements the Model Context Protocol (MCP) specification:

  1. Claude Code launches the proxy as a child process and communicates via stdio (stdin/stdout)

  2. The proxy authenticates with Pharaoh using stored credentials (or triggers device flow)

  3. All MCP messages (tool calls, responses, notifications) are relayed to the remote Pharaoh server over SSE (Server-Sent Events)

  4. Pharaoh queries the knowledge graph and returns architectural data to the proxy

  5. The proxy forwards responses back to Claude Code via stdio

Authentication uses RFC 8628 (OAuth 2.0 Device Authorization Grant) — no browser is needed on the machine running Claude Code.

Available Tools

Once connected, Pharaoh provides 19 MCP tools organized into four categories:

Orient (Free)

Tool

What it answers

get_codebase_map

What modules exist and how do they relate?

get_module_context

What does this module look like before I modify it?

search_functions

Does this function already exist somewhere?

get_design_system

What UI components and tokens already exist?

Investigate (Free + Pro)

Tool

What it answers

get_blast_radius

What breaks if I change this function/file/module?

query_dependencies

How are these two modules connected?

check_reachability

Is this function actually reachable from entry points?

get_vision_docs

Is there a PRD or spec for this?

Audit (Pro)

Tool

What it answers

get_vision_gaps

What's specified but not built? What's built but not specified?

get_cross_repo_audit

Are shared dependencies drifting between repos?

get_consolidation_opportunities

Where is duplicate or overlapping logic?

get_unused_code

What code is never called and safe to delete?

get_test_coverage

Which modules/functions lack test coverage?

get_regression_risk

How risky is this change to production?

Manage (Free)

Tool

What it answers

request_upload

Map a local repo without installing the GitHub App

setup_environment

Install recommended development plugins

pharaoh_account

Check plan, toggle PR Guard, trigger refresh

pharaoh_feedback

Report false positives or tool issues

pharaoh_admin

Org-level administration

Inspect Mode

Use --inspect to dump the full tool manifest as JSON (useful for MCP registry validation and debugging):

npx @pharaoh-so/mcp --inspect

This outputs the complete list of tools with their schemas and exits immediately, without connecting to the server.

CLI Options

Usage: pharaoh-mcp [options]

Options:
  --server <url>   Pharaoh server URL (default: https://mcp.pharaoh.so)
  --logout         Clear stored credentials and exit
  --inspect        Output tool manifest as JSON and exit
  --help           Show help
  --version        Show version number

Configuration

Credentials

Credentials are stored at ~/.pharaoh/credentials.json with 0600 permissions (owner-read/write only). The file contains:

  • Access token — used to authenticate MCP requests

  • Refresh token — used to obtain new access tokens when they expire

  • Expiry timestamp — tokens are refreshed automatically before expiration

To clear credentials:

npx @pharaoh-so/mcp --logout

Custom Server

For self-hosted Pharaoh instances or development, register manually:

claude mcp add --scope user pharaoh -- npx @pharaoh-so/mcp --server https://your-pharaoh-instance.com

Environment Variables

Variable

Default

Description

PHARAOH_SERVER_URL

https://mcp.pharaoh.so

Pharaoh server URL (alternative to --server)

Requirements

  • Node.js >= 18

  • Claude Code or any MCP-compatible AI client

  • A Pharaoh account — sign up at pharaoh.so

Security

  • Credentials are stored with restrictive file permissions (0600 — owner-read/write only)

  • Authentication uses the RFC 8628 device authorization flow — no secrets are embedded in the package

  • All communication with the Pharaoh server uses HTTPS/TLS

  • No source code is ever transmitted — Pharaoh maps structural metadata (function names, file paths, dependency relationships) into a knowledge graph. Your code never leaves your machine.

  • Tokens expire after 7 days and are refreshed automatically

  • Only use trusted server URLs — the proxy sends your auth token to the configured server

Reporting Vulnerabilities

If you discover a security vulnerability, please report it responsibly by emailing security@pharaoh.so. Do not open a public issue.

Troubleshooting

"Connection refused" or "ECONNREFUSED"

The Pharaoh server may be temporarily unavailable. Check status.pharaoh.so or try again in a few minutes.

"Token expired" or "401 Unauthorized"

Re-authenticate by running the proxy directly:

npx @pharaoh-so/mcp

Or clear credentials and start fresh:

npx @pharaoh-so/mcp --logout
npx @pharaoh-so/mcp

"pharaoh" not showing in claude mcp list

Make sure you added it with the correct command:

npx @pharaoh-so/mcp

Note the -- separator between pharaoh and npx.

Device code not working

  • Ensure you're opening the URL on a device with browser access

  • The device code expires after 15 minutes — request a new one by re-running the command

  • Check that you're logged into GitHub when authorizing

Slow startup

The first run after installation may take a moment as npm downloads the package. Subsequent runs use the cached version. To pre-install globally:

npm install -g @pharaoh-so/mcp
claude mcp add --scope user pharaoh -- pharaoh-mcp

How Pharaoh Works

Pharaoh parses your repositories using tree-sitter and maps structural metadata into a Neo4j knowledge graph. The graph contains:

  • Functions — names, signatures, complexity scores, export visibility

  • Files — paths, module membership, language classification

  • Modules — logical groupings detected from directory structure

  • Dependencies — import/export relationships, call chains, module connections

  • Vision specs — PRD/spec documents linked to implementation

No source code is stored — only structural metadata. When an AI agent queries Pharaoh, it gets architectural facts in minimal tokens, not raw code dumps. This means your AI assistant can understand your entire codebase architecture without consuming its context window reading files one by one.

Supported Languages

  • TypeScript / JavaScript — full support (functions, classes, imports, exports, JSX)

  • Python — full support (functions, classes, imports, decorators)

  • More languages planned via tree-sitter grammar support

Contributing

Contributions are welcome. Please open an issue first to discuss what you'd like to change.

  1. Fork the repository

  2. Create your feature branch (git checkout -b feature/amazing-feature)

  3. Commit your changes (git commit -m 'Add amazing feature')

  4. Push to the branch (git push origin feature/amazing-feature)

  5. Open a Pull Request

License

MIT -- Pharaoh, Inc.

Available Tools

21 tools
check_reachabilityA
Read-only

Check if functions are reachable from production entry points (API endpoints, CLI commands, cron jobs, event handlers, MCP tools).

CALL THIS WHEN: • After implementing a feature — verify new code is wired into the app • Reviewing a PR — are all new functions actually reachable? • Cleaning up dead code — find functions only called by tests • Before opening a PR — run this as a pre-flight check

RETURNS: For each exported function, whether it's reachable from a production entry point, the path from entry point to function, and classification (entry_point / reachable / unreachable).

TIER: Pharaoh Pro — free tier receives a preview. Summarize what the preview reveals, explain what full data would show for this task, then include the upgrade link.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.3/5.0
Behavior4/5

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

Annotations declare read-only safety (readOnlyHint=true), so description adds value by detailing return structure ('path from entry point to function', 'classification') since no output schema exists, and disclosing tier constraints ('free tier receives a preview') that affect behavior. No contradictions with annotations.

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?

Well-structured with clear visual hierarchy: purpose statement, CALL THIS WHEN bullets, RETURNS specification, and TIER notice. Each section earns its place, though the Pharaoh Pro marketing language ('free tier receives a preview') is slightly verbose compared to purely technical descriptions.

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?

Complete for a zero-parameter analysis tool. Compensates for missing output schema by describing return values (reachability boolean, path, classification). Tier limitation disclosure is essential contextual data. Sufficiently distinguishes from sibling analysis tools via specific scope.

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?

Zero parameters present, triggering baseline 4 per rules. Schema is '{}' (empty object), and description appropriately avoids mentioning parameters since none exist. Schema coverage is trivially 100% with no params to document.

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?

Specific verb ('Check') + resource ('functions') + precise scope ('from production entry points'). Explicitly lists entry point types (API endpoints, CLI, cron, etc.), clearly differentiating from siblings like 'get_unused_code' (which finds dead code without path analysis) and 'get_codebase_map' (general structure).

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?

Excellent 'CALL THIS WHEN:' section with four specific scenarios (post-feature implementation, PR review, dead code cleanup, pre-PR checks). Provides clear contextual triggers. Lacks explicit 'when-not' or named alternative tools to earn a 5, but the scenario specificity strongly implies appropriate usage contexts.

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

get_blast_radiusA
Read-only

Check what breaks BEFORE refactoring, renaming, or deleting a function, file, or module.

CALL THIS WHEN: • You're about to refactor or rename a function — see every caller that needs updating • You want to know if a change is safe — check if anything depends on this code • A PR modifies a shared utility — trace all downstream consumers • You need to assess risk level before a change (LOW/MEDIUM/HIGH)

RETURNS: Risk assessment (LOW/MEDIUM/HIGH), all affected callers grouped by module with file paths, impacted HTTP endpoints, impacted cron jobs, and affected DB operations. Traces up to 5 hops deep through the call graph.

EXAMPLES: • "What breaks if I change the formatMessage function?" • "How many callers does this utility have across the codebase?" • "Is it safe to delete this file or do other modules use it?" • "Which API endpoints are affected if I modify the db module?"

WHY NOT JUST READ FILES: You can grep for direct callers, but you'll miss indirect callers 2-3 hops away, and you won't see affected endpoints or cron jobs. This traces the full transitive dependency chain automatically.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.7/5.0
Behavior4/5

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

Annotations only declare read-only safety. Description adds critical behavioral context: 5-hop depth limit, specific return structure (risk levels, grouped callers by module, HTTP endpoints, cron jobs, DB operations), and explains it traces transitive dependencies automatically.

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?

Excellent structure with clear headings (CALL THIS WHEN, RETURNS, EXAMPLES, WHY NOT JUST READ FILES). Front-loaded purpose statement. Every section earns its place; no redundancy with structured fields.

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?

Despite no output schema, description comprehensively details return values (risk assessment, affected callers, endpoints, cron jobs, DB operations) and explains the analysis depth. Sufficient for a complex static analysis tool.

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?

Zero parameters per schema, establishing baseline 4. Description implicitly clarifies the tool operates on code entities (functions/files/modules) from context, though no explicit parameter documentation is needed for an empty schema.

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?

Opens with specific verb+resource ('Check what breaks') and scope (functions, files, modules). The 'BEFORE' qualifier and 'up to 5 hops deep' distinguish it from simple grep/call lookup tools like search_functions or check_reachability.

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?

Explicit 'CALL THIS WHEN' section lists four specific trigger scenarios (refactoring, safety checks, PR review, risk assessment). The 'WHY NOT JUST READ FILES' section explicitly contrasts with file-reading alternatives, explaining when this tool's transitive analysis is necessary.

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

get_codebase_mapA
Read-only

Pharaoh is a codebase knowledge graph. Call this FIRST — get the full architecture instead of reading files one-by-one.

CALL THIS WHEN: • You're starting a new task and need to understand the codebase structure • You need to know which modules exist and how they relate to each other • You want to find the most actively changed files (likely where bugs live) • You need to see all API endpoints at a glance

RETURNS: All modules with file counts and LOC, dependency graph with weights and bidirectional warnings, hot files (most changed in last 90 days), and all HTTP endpoints with their handler files.

EXAMPLES: • "What modules does this codebase have?" • "How is the codebase structured?" • "Which files change the most?" • "Are there any circular dependencies between modules?"

WHY NOT JUST READ FILES: Manually reading directory trees and package.json files gives you file structure but not dependency relationships, change frequency, or endpoint mappings. This gives you the full architectural picture in one call instead of 20+ file reads.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.7/5.0
Behavior4/5

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

Substantial value beyond annotations. Details return structure (modules with LOC, dependency graph with weights/bidirectional warnings, hot files defined as 'most changed in last 90 days', HTTP endpoints). Does not contradict readOnlyHint=true. Lacks operational details like caching, rate limits, or performance cost of generating full map.

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?

Well-structured with clear headers (CALL THIS WHEN, RETURNS, EXAMPLES, WHY NOT JUST READ FILES). Every section earns its place. Front-loaded with critical guidance 'Call this FIRST'. Length is justified by complexity of the tool's output and usage context.

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?

Excellent completeness for a zero-parameter tool. Compensates for lack of output schema by detailing RETURNS section with specific data structures (weights, bidirectional warnings, 90-day windows). Explains scope and limitations of the knowledge graph sufficiently for agent to use effectively.

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?

Zero parameters present (baseline 4). Schema is empty object. Description correctly omits parameter discussion since none exist, but signals this is a simple invocation via 'Call this FIRST' and lack of filtering options implied by 'no user/workspace filtering' in sibling examples.

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?

Clear specific action ('get the full architecture') and resource ('codebase knowledge graph'). Explicitly distinguishes from siblings by positioning as the FIRST call and contrasting with 'reading files one-by-one' and manual directory traversal.

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?

Exceptional explicit guidelines with 'CALL THIS WHEN:' bullet points covering 4 specific scenarios. Includes 'WHY NOT JUST READ FILES' section that explicitly contrasts with the manual alternative approach, explaining the value add (dependency relationships, change frequency).

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

get_consolidation_opportunitiesA
Read-only

Find code that does the same work in different places — parallel consumers, duplicated call chains, competing DB access, and similar functions across modules. Returns structural clusters for review.

CALL THIS WHEN: • You're looking for code to consolidate, deduplicate, or streamline • Before building something new — check if similar logic already exists in another module • During refactoring planning — find the highest-impact merge opportunities • When the codebase feels bloated but you can't pinpoint where

RETURNS: Clusters grouped by type (parallel consumers, fan-in duplication, competing DB access, signature twins, convergent imports). Each cluster includes file paths, line numbers, and enough context for you to evaluate whether merging makes sense.

WHY NOT JUST READ FILES: You'd need to read every function and mentally track all call chains, DB access, and import patterns across the entire codebase. This queries the full graph in <3 seconds.

TIER: Pharaoh Pro — free tier receives a preview. Summarize what the preview reveals, explain what full data would show for this task, then include the upgrade link.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.7/5.0
Behavior4/5

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

Annotations only declare read-only safety. The description adds critical behavioral context: sub-3-second performance on full graph queries, specific return cluster types (parallel consumers, fan-in duplication, signature twins), and tier limitations (Pharaoh Pro vs preview). It could be elevated to 5 with mention of caching or idempotency, but the tier disclosure is crucial behavioral context.

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?

Perfectly structured with clear headings (CALL THIS WHEN, RETURNS, WHY NOT JUST READ FILES, TIER). Every sentence earns its place—the tier warning is essential for handling truncated preview responses, and the performance claim (<3 seconds) justifies using this over multiple file reads.

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?

Despite lacking an output schema, the description thoroughly documents return values: cluster types, file paths, line numbers, and evaluation context. For a complex graph analysis tool, this provides sufficient information to interpret results and decide on consolidation actions.

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?

Input schema contains zero parameters. Per rubric guidelines, zero parameters establishes a baseline score of 4. The description appropriately requires no parameter clarification since the tool operates as a global analysis query.

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 specific verb-resource combination ('Find code that does the same work') and enumerates exact structural patterns detected (parallel consumers, duplicated call chains, competing DB access). This clearly distinguishes the tool from siblings like get_unused_code (dead code detection) or search_functions (symbol lookup).

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 explicit 'CALL THIS WHEN:' section provides four distinct scenarios including pre-development checks and refactoring planning. The 'WHY NOT JUST READ FILES' section effectively contrasts this against manual file inspection and generic read tools, guiding the agent away from inefficient alternatives.

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

get_cross_repo_auditA
Read-only

Compare two repositories for code duplication, structural overlap, and shared patterns.

CALL THIS WHEN: • You need to find copy-pasted code across two repos • You're planning a shared package extraction • You want to compare the structure of two codebases • A team is auditing cross-repo duplication before a refactor

RETURNS: Three tiers of function matches (HIGH = exact duplicates, MEDIUM = diverged implementations, LOW = name-only), shared module structure, and shared environment variables. Each tier has clear action guidance.

PREREQUISITE: Both repos must be mapped via 'pharaoh add'. Use repo names, not paths.

TIER: Pharaoh Pro — free tier receives a preview. Summarize what the preview reveals, explain what full data would show for this task, then include the upgrade link.

EXAMPLES: • "Compare web-app and api for code duplication" • "Find shared functions between the mobile and web repos" • "What code is duplicated across our two services?"

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.9/5.0
Behavior5/5

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

Annotations declare readOnlyHint=true (safe operation), while the description adds substantial behavioral context: it details the three-tier match system (HIGH/MEDIUM/LOW with definitions), discloses additional return data (shared module structure, environment variables), explains the preview limitations of the free tier, and notes that matches include 'clear action guidance'.

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?

Excellent structure with clear section headers (CALL THIS WHEN, RETURNS, PREREQUISITE, TIER, EXAMPLES). Information is front-loaded and dense—every sentence serves a specific purpose, from use-case triage to output format explanation to business logic constraints.

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?

Despite lacking an output schema, the description comprehensively documents the return structure (three match tiers with definitions, additional shared data types), prerequisites, and tier limitations. For a read-only analysis tool with clear annotations, this provides sufficient context for correct invocation and expectation management.

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 zero parameters, the baseline score is 4 per evaluation rules. The description provides implicit parameter guidance by specifying 'Use repo names, not paths' and referencing the two repositories to be compared, though the input schema is empty.

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 specific verb ('Compare') and clear resource scope ('two repositories'), detailing exact analysis targets ('code duplication, structural overlap, and shared patterns'). It effectively distinguishes from single-repo siblings like `get_codebase_map` and `search_functions` by emphasizing cross-repo comparison.

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?

Contains an explicit 'CALL THIS WHEN' section listing four specific scenarios (copy-paste detection, package extraction planning, structure comparison, pre-refactor auditing). It also states prerequisite requirements ('Both repos must be mapped via pharaoh add') and input format constraints ('Use repo names, not paths'), providing clear invocation boundaries.

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

get_design_systemA
Read-only

Discover the design system BEFORE creating any UI component.

CALL THIS WHEN: • You're about to create a React/Vue/Svelte component — check what already exists • You need to know the canonical component for a UI pattern (button, input, modal) • You want to find design tokens (colors, spacing, typography) to use • You suspect raw HTML elements are used instead of existing components

RETURNS: Components with props and usage count, design tokens with values, and anti-patterns where raw HTML is used instead of existing components. Screen/page components are excluded by default.

EXAMPLES: • "What components does this design system have?" • "Is there already a Button component I should use?" • "What color tokens are available?" • "Where are raw HTML elements used instead of components?"

WHY NOT JUST READ FILES: Design systems span dozens of files across multiple directories. This returns the complete inventory with usage frequency — the most-used components are the most canonical.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.7/5.0
Behavior4/5

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

Annotations declare readOnlyHint=true; description adds valuable behavioral context beyond safety: details return structure (components with props/usage counts, tokens, anti-patterns) and important scope limitation (screen/page components excluded by default). Does not mention performance characteristics or caching 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?

Excellent structure with clear visual hierarchy: main directive, CALL THIS WHEN, RETURNS, EXAMPLES, and WHY NOT sections. Every sentence earns its place; examples are concrete and relevant. No redundant repetition of schema or annotation data.

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?

Highly complete for a parameter-free tool. Compensates for missing output schema by explicitly detailing what the tool returns (components, tokens, anti-patterns) and what it excludes. Complexity is appropriate for the tool's scope.

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?

Zero parameters present; schema is empty object. Baseline score of 4 applies as per rules for parameter-free tools. No parameter documentation needed.

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?

Excellent specificity: verb 'discover' + resource 'design system' + clear scope (components, tokens, anti-patterns). The description clearly distinguishes this from general codebase analysis tools like get_codebase_map by focusing specifically on UI components and design tokens.

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?

Outstanding guidance with explicit 'CALL THIS WHEN' section listing 4 specific scenarios (creating React/Vue components, finding canonical patterns, locating tokens, detecting anti-patterns). Includes 'WHY NOT JUST READ FILES' section explaining when to use this tool versus manual file exploration.

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

get_module_contextA
Read-only

Get everything you need to know about a module BEFORE modifying it or writing a PRD.

CALL THIS WHEN: • You're about to change code in a module — understand its full surface area first • You're writing a PRD or design doc and need ground-truth about what exists • You need to know what depends on this module (who breaks if you change it) • You want to see a module's DB tables, endpoints, cron jobs, or env vars at a glance

RETURNS: Complete module profile in ~2K tokens: file count, LOC, all exported function signatures with complexity, dependency graph (imports from + imported by), DB table access, HTTP endpoints, cron jobs, env vars, vision spec alignment, and external callers from other modules.

EXAMPLES: • "What does the slack module look like before I add a new notification?" • "What endpoints does the auth module expose?" • "Which modules depend on the db module?" • "What env vars does the crons module use?"

WHY NOT JUST READ FILES: A module can span dozens of files. Manual exploration burns 10K-40K tokens and still misses cross-module callers, DB access patterns, and vision spec alignment. This returns the complete picture in one call.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.8/5.0
Behavior5/5

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

Annotations only declare read-only safety; description adds substantial behavioral context: token cost (~2K), specific return payload structure (file count, LOC, function signatures, dependency graphs, DB access, endpoints, cron jobs, env vars), and performance comparison to manual exploration (10K-40K tokens saved). No contradictions with annotations.

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?

Though lengthy, content is densely valuable with zero redundancy. Structured with clear headers (CALL THIS WHEN, RETURNS, EXAMPLES, WHY NOT JUST READ FILES) and bullet points enabling scannability. Length is justified by absence of output schema and zero parameters requiring description to carry full semantic load.

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?

Compensates excellently for missing output schema by exhaustively documenting return value structure (listing 10+ specific data points from file counts to vision spec alignment). With zero parameters and no output schema, the description provides complete contractual information necessary for 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?

Input schema contains zero parameters, triggering baseline score of 4 per rubric. Description correctly omits parameter discussion as none exist, focusing instead on behavioral contract and return value semantics.

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?

Opens with specific verb+resource ('Get everything... about a module') and scope constraint ('BEFORE modifying'). Distinguishes from siblings like get_codebase_map (high-level architecture) and search_functions (single function level) by emphasizing comprehensive surface-area analysis for pre-modification safety.

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?

Contains explicit 'CALL THIS WHEN:' section with four specific triggering contexts (changing code, writing PRDs, checking dependents, viewing resources). Includes 'WHY NOT JUST READ FILES' subsection that explicitly contrasts with manual exploration, establishing clear alternative avoidance criteria.

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

get_pharaoh_docsA
Read-only

Stuck, confused, or troubleshooting? Get help from Pharaoh's documentation. Ask about setup, tools, security, pricing, or any feature.

CALL THIS WHEN: • You're confused about how to use a Pharaoh tool • You need setup or connection instructions • You want to know about security, pricing, or how Pharaoh works • The user asks "how does Pharaoh do X?" • A Pharaoh tool returned an unexpected result and you need context

RETURNS: Relevant documentation sections as markdown with links to the full page on pharaoh.so/docs.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.6/5.0
Behavior4/5

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

Annotations establish readOnlyHint=true and destructiveHint=false, confirming this is a safe read operation. The description adds valuable behavioral context beyond these annotations by specifying the return format ('markdown'), content structure ('Relevant documentation sections'), and reference links ('links to the full page on pharaoh.so/docs').

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 uses a clear three-part structure: value proposition ('Stuck, confused...'), usage criteria ('CALL THIS WHEN'), and output specification ('RETURNS'). Every sentence earns its place with zero redundancy despite the structured formatting.

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 simplicity (no parameters, read-only) and lack of output schema, the description compensates adequately by explicitly stating what content is returned and its format. Minor gap: it doesn't explicitly characterize the search/retrieval mechanism (semantic vs keyword), though this is implied by the troubleshooting context.

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?

Input schema has zero parameters (empty object). Per evaluation rules, 0 parameters warrants a baseline score of 4. The description appropriately does not fabricate parameter semantics where none exist.

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 retrieves help documentation using specific verbs ('Get help from Pharaoh's documentation') and explicitly scopes it to setup, tools, security, and pricing. It effectively distinguishes itself from technical code-analysis siblings like get_blast_radius and get_codebase_map by positioning as the product support/documentation resource.

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 includes an explicit 'CALL THIS WHEN:' section with five specific scenarios (troubleshooting unexpected results, setup instructions, 'how does Pharaoh do X' questions, etc.). This provides clear contextual boundaries that prevent confusion with the server's numerous code analysis tools.

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

get_regression_riskA
Read-only

Score functions by regression risk — how likely a change here breaks production.

CALL THIS WHEN: • Before modifying a function — understand blast radius and risk • During code review — prioritize review effort on highest-risk changes • Planning refactors — identify the riskiest code to change carefully • After a regression — find other high-risk functions that need attention

RETURNS: Functions ranked by regression risk score (0-1), with tier (critical/high/medium/low), complexity, entry-point exposure, file churn, and downstream caller count.

TIER: Pharaoh Pro — free tier receives a preview. Summarize what the preview reveals, explain what full data would show for this task, then include the upgrade link.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.5/5.0
Behavior4/5

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

Adds crucial behavioral context beyond readOnlyHint=true: describes detailed return format (risk score 0-1, critical/high/medium/low tiers, complexity metrics, churn data) and discloses tier limitations (Pharaoh Pro vs free preview). No contradictions with annotations.

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?

Well-structured with clear headers (CALL THIS WHEN, RETURNS, TIER). Every section serves distinct purpose. Tier warning about 'preview' vs 'full data' is necessary for user expectations despite being commercial context.

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?

No output schema exists, but RETURNS section comprehensively describes output structure (scores, tiers, complexity metrics). Tier limitations disclosure ensures users understand data completeness constraints. Appropriate for 0-parameter analysis tool.

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?

Input schema has zero parameters, establishing baseline 4 per rubric. Description correctly requires no parameter elaboration since the tool appears to analyze the current context or entire codebase without specific inputs.

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?

Opens with specific verb 'Score' + resource 'functions' + clear concept 'regression risk — how likely a change here breaks production.' Distinguished from sibling get_blast_radius by focusing on quantified risk scoring rather than just mapping dependencies.

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?

Exceptional 'CALL THIS WHEN' section lists 4 specific contextual triggers: before modifying functions, during code review, planning refactors, and after regressions. Provides concrete workflow integration points that clearly separate it from analysis tools like search_functions or get_test_coverage.

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

get_test_coverageA
Read-only

See which modules and files have test coverage and which don't.

CALL THIS WHEN: • Before writing tests — find what's already covered • During code review — check if changed modules have tests • Planning test strategy — identify untested high-complexity code

RETURNS: Per-module test coverage summary — which files have corresponding test files, and which high-complexity functions lack tests.

TIER: Pharaoh Pro — free tier receives a preview. Summarize what the preview reveals, explain what full data would show for this task, then include the upgrade link.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.5/5.0
Behavior4/5

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

While annotations declare readOnlyHint=true, the description adds crucial behavioral context: it details the return format (per-module summary with file-level test presence and high-complexity function gaps) and discloses tier limitations (Pharaoh Pro vs. free preview constraints). This warns the agent that free tier users receive limited data requiring summarization and upgrade links.

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?

Well-structured with clear sections: purpose statement, usage guidelines (bulleted), return value description, and tier limitations. The tier section is slightly verbose but contains necessary business logic. Information is front-loaded with the core purpose appearing immediately.

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?

Despite lacking an output schema, the description compensates by detailing what the tool returns (per-module summaries, file coverage status, high-complexity function gaps). It also addresses subscription tier constraints, providing sufficient context for a zero-parameter read-only analysis tool.

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?

The input schema contains zero parameters, which establishes a baseline score of 4. The description appropriately makes no mention of parameters since none exist, requiring no additional semantic clarification beyond the empty schema.

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 'See[s] which modules and files have test coverage and which don't' and specifies it returns a 'Per-module test coverage summary.' This specifically targets test coverage analysis, distinguishing it from sibling tools like get_codebase_map or get_module_context which handle general code structure rather than test-specific gaps.

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?

Contains an explicit 'CALL THIS WHEN:' section with three distinct scenarios: before writing tests, during code review, and when planning test strategy. These concrete use cases provide clear guidance on when this tool is appropriate versus other analysis tools in the suite.

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

get_unused_codeA
Read-only

Find dead code — functions not reachable from any production entry point.

CALL THIS WHEN: • You're cleaning up or refactoring a module — find what's truly dead • Before adding new code — check if similar dead code already exists • During code review — identify functions that lost their production callers • After a refactor — verify nothing was accidentally disconnected

RETURNS: Three-tier classification: • Dead — graph-unreachable AND no text references anywhere. Safe to delete. • Likely Dead — graph-unreachable BUT found as text in other files (may be string-dispatched, dynamically imported, etc). Includes evidence file paths. • Alive — graph-reachable from entry points. Not reported.

Uses graph reachability + text reference backup layer for high-confidence dead code detection.

TIER: Pharaoh Pro — free tier receives a preview. Summarize what the preview reveals, explain what full data would show for this task, then include the upgrade link.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.7/5.0
Behavior5/5

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

Beyond annotations (readOnlyHint=true), the description details the three-tier classification system (Dead/Likely Dead/Alive), explains the dual-layer detection methodology ('graph reachability + text reference'), and discloses the 'Pharaoh Pro' tier limitation requiring the AI to summarize previews. No contradictions with 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?

Description uses clear section headers ('CALL THIS WHEN:', 'RETURNS:', 'TIER:') creating scannable structure. It is front-loaded with the core purpose, and every section earns its place—including the tier warning which is critical for the agent to handle partial responses correctly.

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?

With no output schema provided, the description compensates by fully documenting the three-tier return classification and file path evidence. It also covers the free-tier limitation (preview mode), ensuring the agent understands operational constraints before 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?

Input schema contains zero parameters, establishing a baseline of 4. The description correctly omits parameter discussion, as none exist. Context signals confirm 100% schema coverage (vacuously true for empty schemas).

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 specific verb ('Find') and resource ('dead code/functions'), immediately clarifying scope with 'not reachable from any production entry point.' This distinguishes it from siblings like check_reachability (which likely validates specific functions) and get_blast_radius (impact analysis) by defining the specific graph-unreachability detection use case.

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 'CALL THIS WHEN:' section provides four explicit, actionable scenarios (cleaning up, before adding code, code review, post-refactor). However, it lacks explicit named alternatives (e.g., 'use check_reachability instead for single-function verification') or explicit 'when not to use' exclusions, keeping it from a 5.

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

get_vision_docsA
Read-only

Get the documented intent — CLAUDE.md files, PRDs, roadmaps, skill specs — to understand WHY code exists, not just what it does.

CALL THIS WHEN: • You're implementing a feature and need to check if a PRD or spec exists for it • You want to understand the original design intent behind existing code • You need to verify your implementation matches documented requirements • You're reviewing code and want to check it against the documented vision

RETURNS: All vision documents grouped by type (claude_md, prd, skill, roadmap), with each spec's title, section ID, and implementation status showing which functions implement each spec.

EXAMPLES: • "Is there a PRD for the notification system?" • "What does the CLAUDE.md say about the auth module?" • "What specs exist for the slack integration?" • "Which specs are already implemented vs still pending?"

WHY NOT JUST READ FILES: Vision docs are scattered across CLAUDE.md files, PRDs, and roadmaps in different directories. This aggregates them all AND cross-references against actual implementations so you can see spec-to-code alignment in one call.

TIER: Pharaoh Pro — free tier receives a preview. Summarize what the preview reveals, explain what full data would show for this task, then include the upgrade link.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.6/5.0
Behavior4/5

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

Annotations declare readOnlyHint=true. Description adds significant behavioral context: aggregation behavior (scattered docs across directories), cross-referencing logic (spec-to-code alignment), and return structure (grouped by type with title/section ID/implementation status). Also discloses tier limitation (Pharaoh Pro preview). Does not mention error conditions or caching behavior.

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?

Well-structured with clear headers (CALL THIS WHEN, RETURNS, EXAMPLES, WHY NOT JUST READ FILES, TIER). Front-loaded with purpose statement. Length is appropriate given complexity and lack of output schema, though slightly verbose. Every section serves 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?

No output schema exists, but description fully compensates with RETURNS section detailing grouping logic and field structure. Covers purpose, usage scenarios, return format, alternative comparison, and commercial constraints (Pro tier). Complete for a metadata/aggregation tool with good annotations.

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?

Zero parameters present. Per rubric, 0 params = baseline 4. The EXAMPLES section provides calling patterns ('Is there a PRD for...', 'What does the CLAUDE.md say...') which help clarify usage without parameters.

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?

Opens with specific verb 'Get' and clearly identifies resource as 'documented intent — CLAUDE.md files, PRDs, roadmaps, skill specs'. Distinguishes value proposition (understand WHY code exists) from siblings like get_codebase_map or get_pharaoh_docs. The 'WHY NOT JUST READ FILES' section explicitly differentiates from alternative approaches.

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?

Contains explicit 'CALL THIS WHEN:' section with four specific scenarios (implementing features, understanding design intent, verifying requirements, code review). Includes concrete EXAMPLES with four natural language queries. The 'WHY NOT JUST READ FILES' provides clear selection guidance against direct file reading alternatives.

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

get_vision_gapsA
Read-only

Find what's missing — specs without code AND complex code without specs. Call this to prioritize what to build or document next.

CALL THIS WHEN: • You're planning work and need to find unimplemented features from PRDs • You want to find complex undocumented functions that need specs or tests • You need to audit spec-to-code alignment for a module • Someone asks "what's left to build?" or "what's undocumented?"

RETURNS: Two lists — (1) specified-but-not-built: PRD specs with no implementing functions, and (2) built-but-not-specified: complex functions above a threshold with no vision spec. Includes function names, complexity scores, file paths, and spec references.

EXAMPLES: • "What features from the PRDs haven't been built yet?" • "Which complex functions lack documentation?" • "What's the spec coverage for the auth module?" • "Are there any orphaned specs or undocumented behaviors?"

WHY NOT JUST READ FILES: Manually diffing PRD bullets against code is error-prone and misses complexity metrics. This cross-references the entire spec tree against the function graph automatically — gaps that would take an hour to find manually surface in seconds.

TIER: Pharaoh Pro — free tier receives a preview. Summarize what the preview reveals, explain what full data would show for this task, then include the upgrade link.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.5/5.0
Behavior4/5

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

While annotations declare readOnlyHint=true/destructiveHint=false, the description adds significant operational context: it discloses the cross-referencing algorithm ('cross-references the entire spec tree against the function graph'), performance characteristics ('gaps that would take an hour to find manually surface in seconds'), and business-tier constraints ('Pharaoh Pro — free tier receives a preview'). It does not disclose specific complexity thresholds or rate limits, preventing a 5.

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 well-structured with clear visual headers (CALL THIS WHEN, RETURNS, EXAMPLES) that facilitate parsing. It is front-loaded with the core purpose. While lengthy, the EXAMPLES section (4 queries) and tier warning earn their place by clarifying intended use cases and business constraints. Minor redundancy exists between the bullet points and examples, preventing a perfect 5.

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?

Despite lacking an output schema, the description thoroughly documents return values: 'Two lists' with specific fields (function names, complexity scores, file paths, spec references). It also explains the tier-based limitation (preview vs. full data) which affects the output. For a complex analysis tool with zero parameters, this provides sufficient completeness, though specific complexity thresholds could have been mentioned.

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?

Input schema contains zero parameters. Per calibration rules, 0 params yields a baseline score of 4. The description appropriately requires no parameter clarification since the tool operates as a global analysis requiring no filters.

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 specific dual-purpose statement: 'Find what's missing — specs without code AND complex code without specs.' This clearly defines the tool's unique value proposition (bidirectional gap analysis) and distinguishes it from siblings like get_vision_docs (which likely just retrieves documents) or get_codebase_map (structural overview). The scope is precisely bounded to spec-to-code alignment.

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?

Contains an explicit 'CALL THIS WHEN' section with four specific scenarios (planning work, finding undocumented functions, auditing alignment, answering 'what's left'). Critically, it includes 'WHY NOT JUST READ FILES' which explicitly contrasts the tool against the manual alternative, demonstrating when NOT to use manual file reading. This provides clear contextual guardrails for tool selection.

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

map_open_source_repoA

Map a public GitHub repository into Pharaoh so you can query its architecture. The repo will be available to all Pharaoh users.

CALL THIS WHEN:

  • The user wants to analyze or query an open-source repo that isn't in Pharaoh yet

  • get_codebase_map doesn't show a well-known public repo the user is asking about

  • The user says "map this repo", "add this project", or provides a GitHub URL for a public repo

After mapping completes (usually 1-3 minutes), use get_codebase_map to see the repo.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.6/5.0
Behavior4/5

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

Annotations indicate non-readonly, non-destructive operation. Description adds valuable context: operation takes 1-3 minutes, repo becomes available to all Pharaoh users (shared visibility), and constraint that only public repos are supported. No contradictions with 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?

Clear two-section structure with purpose statement front-loaded. 'CALL THIS WHEN' bullets are scannable. No redundant text—every sentence provides concrete guidance on scope, timing, or sibling differentiation.

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?

Comprehensive for a zero-parameter trigger tool: covers prerequisites (public repo, not already mapped), side effects (global visibility), timing expectations, and follow-up actions (use get_codebase_map). Minor gap: does not mention error handling for private repos or rate limiting.

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?

Input schema contains zero parameters with 100% description coverage. Baseline score of 4 applies per rubric. Description implies GitHub URL is required but does not explicitly document parameter mechanics, which could confuse agents about how the repo identifier is passed.

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?

Description uses specific verb 'Map' with clear resource 'public GitHub repository' and scope 'into Pharaoh.' Explicitly distinguishes from sibling get_codebase_map by stating this is for repos 'that isn't in Pharaoh yet' and directing users to get_codebase_map after mapping completes.

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?

Contains explicit 'CALL THIS WHEN:' section with three specific trigger conditions, including clear alternation logic with get_codebase_map ('doesn't show a well-known public repo'). Directly maps user phrases like 'map this repo' to tool invocation.

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

pharaoh_accountA

View your Pharaoh subscription status and manage billing. Toggle PR Guard and trigger graph refreshes.

CALL THIS WHEN: • You want to check your subscription status • You need to update payment method, view invoices, or cancel • You want to know what plan you're on • You want to change which repo is active on the free tier • You want to enable or disable PR Guard on a repo • You want to refresh a repo's graph (re-map with latest code) • You want to open the Pharaoh dashboard to manage repos and settings visually

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.5/5.0
Behavior4/5

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

The description mentions mutation actions (Toggle PR Guard, trigger graph refreshes, manage billing) which aligns correctly with readOnlyHint=false. It also notes the ability to open the visual dashboard externally, adding context beyond the annotations. Does not mention rate limits or auth requirements, but annotations cover the safety profile (destructiveHint=false).

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?

Well-structured with the core purpose front-loaded in the first sentence, followed by the explicit 'CALL THIS WHEN' directive. While the bullet list is lengthy, each item represents a distinct use case that helps the LLM route correctly among the 20+ sibling tools. No wasted sentences.

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 handles multiple account functions (billing, PR Guard, graph refresh) with no output schema, the description adequately covers the functional scope. It could benefit from hinting at return structure (e.g., 'returns subscription details'), but the comprehensive use-case coverage compensates.

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?

Input schema contains zero parameters (empty properties object). Per calibration rules, 0 params = baseline 4. The description appropriately does not invent parameters, implying the tool manages state contextually or interactively.

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 opening sentence uses specific verbs (View, manage, Toggle, trigger) with clear resources (subscription status, billing, PR Guard, graph refreshes). It effectively distinguishes from siblings—all other tools are code analysis functions (get_codebase_map, search_functions, etc.), while this is explicitly the account/billing management interface.

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?

Contains an explicit 'CALL THIS WHEN:' section with 7 detailed bullet points covering subscription checks, payment updates, plan verification, PR Guard toggling, graph refreshes, and dashboard access. This provides explicit routing guidance for when to select this tool over the code-analysis siblings.

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

pharaoh_feedbackA

Call this when results were unexpectedly empty or unhelpful, or when a tool gave you exactly what you needed.

CALL THIS WHEN: • A search returned no results but you expected matches • A tool response was missing critical information • A tool saved you significant time and you want to reinforce that pattern • You had to work around a tool limitation • get_unused_code flagged a function as dead that is actually alive (include dead_code_report)

WHY: Your feedback directly improves result quality for your team.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.7/5.0
Behavior4/5

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

Annotations cover safety (readOnly: false, destructive: false), while the description adds valuable outcome context ('Your feedback directly improves result quality'). It explains the 'WHY' behind the tool's existence, though it could enhance further by describing the feedback mechanism (e.g., whether it's batched, immediate, or triggers notifications).

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?

Perfectly structured with three distinct sections: opening condition statement, bulleted triggers ('CALL THIS WHEN'), and value proposition ('WHY'). Every sentence serves a distinct purpose. No redundancy with structured fields (title/annotations). Appropriate length for complexity.

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 feedback utility with no parameters and no output schema, the description is complete. It covers invocation triggers, expected content, and value proposition. No gaps exist given the tool's simplicity; the agent understands exactly when and why to invoke this tool.

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?

Input schema contains 0 parameters, setting baseline 4 per evaluation rules. The description mentions including specific content ('dead_code_report') which contextualizes how to use the parameterless tool, though without explicit parameters in the schema, no additional semantic mapping is required or provided.

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 defines the tool's purpose using specific verbs ('Call this', 'Submit') and identifies the resource (feedback). It distinguishes itself from siblings by referencing specific tools like 'get_unused_code' and scenarios like 'A search returned no results' that map to other tools in the server (search_functions), effectively differentiating when to use feedback versus direct tool invocation.

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?

Excellent explicit guidance via 'CALL THIS WHEN:' bullet points covering empty results, missing information, positive reinforcement, workarounds, and specific false positives from get_unused_code. It provides concrete trigger conditions and even specifies what content to include ('include dead_code_report'), giving clear alternatives to using other tools.

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

pharaoh_reconA
Read-only

Get the full architectural picture in ONE call — combines codebase map, module deep-dives, function search, blast radius, and dependency queries.

CALL THIS WHEN: • Starting a new task and need to orient before making changes • Running a plan review, PR review, or architecture assessment • You know which modules, functions, and blast targets you need up front

RETURNS: All requested sections in a single response — codebase map, module profiles, search results, blast radius assessments, and dependency paths. All sub-queries run in parallel server-side.

Use individual tools (get_module_context, get_blast_radius, search_functions, etc.) for follow-up deep-dives after initial recon.

LIMITS: Max 5 modules, 3 searches, 3 blast radius targets, 3 dependency pairs per call.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.7/5.0
Behavior4/5

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

Annotations indicate read-only safety; description adds valuable behavioral constraints including 'All sub-queries run in parallel server-side' and explicit 'LIMITS' section (max 5 modules, 3 searches, etc.). Does not disclose latency, caching, or permission requirements.

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?

Excellent structure with clear semantic headings (CALL THIS WHEN, RETURNS, LIMITS). No wasted words; every sentence provides specific guidance on capabilities, constraints, or alternatives.

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?

Despite no output schema, description comprehensively details return value ('codebase map, module profiles, search results...'), aggregation behavior, and operational limits. Complete for a zero-parameter reconnaissance tool.

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?

Zero parameters present (baseline 4). Description appropriately omits parameter discussion since none exist, though it implies capability constraints (limits) that would typically be parameterized, potentially causing slight confusion.

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?

Description clearly states the tool 'Get[s] the full architectural picture in ONE call' and explicitly distinguishes from siblings by listing what it combines (codebase map, module deep-dives, etc.) and stating 'Use individual tools (get_module_context, get_blast_radius, search_functions, etc.) for follow-up deep-dives'.

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?

Contains explicit 'CALL THIS WHEN' section with three specific scenarios (starting tasks, reviews, when targets are known upfront) and directly names alternative individual tools for follow-up actions, providing clear when-to-use vs when-not-to-use guidance.

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

query_dependenciesA
Read-only

Trace how two modules are connected BEFORE splitting, merging, or decoupling them.

CALL THIS WHEN: • You're refactoring and need to know if two modules depend on each other • You suspect a circular dependency and want to confirm it • You're planning to extract shared code and need to see what both modules use • You need to understand why changing module A affects module B

RETURNS: Forward and reverse dependency paths between the two modules, circular dependency detection with warnings, and all shared dependencies (modules both depend on).

EXAMPLES: • "Do slack and crons have a circular dependency?" • "What's the dependency path from auth to db?" • "What do the api and workers modules have in common?" • "Why does changing utils break the notifications module?"

WHY NOT JUST READ FILES: Import statements show direct dependencies but miss transitive paths (A→B→C→D). This traces the full module graph and reveals indirect connections, circular dependencies, and shared dependencies invisible from file-level inspection.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.5/5.0
Behavior4/5

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

Annotations declare readOnlyHint=true. Description adds graph traversal behavior (reveals 'transitive paths', 'indirect connections', 'full module graph'), return value structure ('Forward and reverse dependency paths', 'circular dependency detection', 'shared dependencies'), and safety context (analysis operation with warnings). Does not mention rate limits or performance constraints.

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?

Well-structured with clear headers (CALL THIS WHEN, RETURNS, EXAMPLES, WHY NOT JUST READ FILES). Front-loaded with core purpose in first sentence. Slightly verbose but every section adds distinct value; examples are concrete and help clarify intent.

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?

No output schema exists, so description adequately explains return values (dependency paths, circular detection, shared dependencies). Covers purpose, usage contexts, return format, and differentiators from siblings. Absence of parameter documentation is appropriate given 0-param schema.

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?

Schema contains 0 parameters. Per rubric, 0 params = baseline 4. Description conceptually references 'two modules' but does not contradict the schema (no parameter section claimed); this describes the conceptual scope of the analysis rather than specific input fields.

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?

Opening sentence uses specific action verb 'Trace' with clear resource 'modules' and scope 'how two modules are connected'. Distinguishes from file-reading and general mapping tools via 'BEFORE splitting, merging, or decoupling' qualifier and the 'WHY NOT JUST READ FILES' section explaining transitive graph analysis vs direct imports.

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?

Contains explicit 'CALL THIS WHEN:' section with 4 specific refactoring scenarios (circular dependencies, extraction planning, change impact analysis). Includes 'WHY NOT JUST READ FILES' section that explicitly contrasts with manual inspection alternative, explaining transitive paths vs direct imports.

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

request_uploadA

Map a local repo into Pharaoh without installing the GitHub App. Source code never leaves the machine — only structural metadata (function names, imports, exports, complexity) is uploaded.

CALL THIS WHEN:

  • get_codebase_map returns no repos for this user

  • The user asks about a repo that isn't mapped in Pharaoh

  • The user wants to map a private repo without admin access

  • The user says "analyze this repo", "map this codebase", or similar

When 'path' is provided, this tool returns a ready-to-run bash block that parses the repo locally and uploads the structural metadata. The agent should execute this bash block directly — no user action needed beyond approval. The upload URL is single-use and expires in 10 minutes.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.9/5.0
Behavior5/5

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

Superb. Annotations only state readOnlyHint=false/destructiveHint=false. Description adds critical operational context: single-use URL with 10-minute expiration, exact data transmitted (structural metadata only), agent execution responsibilities ('execute this bash block directly'), and requires user approval. Privacy disclosure ('Source code never leaves') is crucial behavioral context.

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?

Excellent structure with three distinct sections: purpose/privacy guarantee, usage conditions with bullet points, and execution instructions. Front-loaded with clear verb. No redundant text; complex operational details (expiration, single-use, local parsing) are essential.

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?

Thorough despite no output schema. Description compensates by detailing return value format ('ready-to-run bash block'), side effects (repo mapping), authentication needs (user approval), temporal constraints (10-minute expiry), and data handling policies. Covers all operational gaps.

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?

Baseline 4 for 0 parameters. Input schema is empty object. Description mentions 'When path is provided' which appears to reference a parameter not defined in schema, potentially causing confusion, but with zero parameters there is no schema documentation to supplement.

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?

Excellent. States specific action ('Map a local repo into Pharaoh'), identifies the resource (local repo), and distinguishes from sibling workflow ('without installing the GitHub App'). The privacy guarantee ('Source code never leaves the machine') further clarifies the scope.

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?

Exceptional. Explicit 'CALL THIS WHEN:' section with four specific bullet points includes trigger phrases ('analyze this repo'), references sibling tool get_codebase_map for conditional logic, and identifies target scenarios (private repos without admin access). Clear differentiation from GitHub App installation path.

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

search_functionsA
Read-only

Check if functionality already exists BEFORE writing any new function, utility, or helper.

CALL THIS WHEN: • You're about to create a new function — search first to prevent duplicates • You need to find where a concept is implemented (e.g., 'notify', 'validate', 'parse') • You're looking for the right function to import instead of reimplementing • A task says 'add X functionality' — verify X doesn't already exist

RETURNS: Matching functions with file paths, line numbers, module, export status, async flag, complexity scores, and full signatures. Searches all functions across the entire codebase.

EXAMPLES: • "Is there already a function that sends Slack notifications?" • "What validation utilities exist?" • "Where is email formatting handled?" • "Does a retry wrapper already exist somewhere?"

WHY NOT JUST READ FILES: grep only finds exact string matches and misses re-exports, aliases, and barrel-file indirection. This searches the full resolved dependency graph — if it exists anywhere in the codebase, this finds it.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.6/5.0
Behavior4/5

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

With readOnlyHint:true already indicating safe read operations, the description adds valuable return value disclosure: 'Matching functions with file paths, line numbers, module, export status, async flag, complexity scores, and full signatures.' It also clarifies scope: 'Searches all functions across the entire codebase' and 'full resolved dependency graph.' Could mention performance characteristics or caching behavior for a perfect 5.

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?

Well-structured with clear headers (CALL THIS WHEN, RETURNS, EXAMPLES, WHY NOT JUST READ FILES) making it scannable despite length. Every section earns its place—examples are concrete, justification vs grep is distinctive context. Slight deduction only because the length is substantial for an MCP description, though justified by the zero-parameter nature requiring clear usage 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 no output schema exists, the description comprehensively documents return values (file paths, line numbers, signatures, etc.). For a zero-parameter, read-only search tool, it adequately covers scope (entire codebase), behavior (dependency graph resolution), and use cases. No gaps identified given the tool's simplicity and annotation coverage.

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?

Input schema contains 0 parameters (empty object), triggering the baseline score of 4 per rubric ('0 params = baseline 4'). Description appropriately does not invent parameter documentation where none exist, and the provided examples demonstrate usage patterns without implying non-existent parameters.

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?

Excellent specificity: 'Check if functionality already exists BEFORE writing any new function' provides clear verb (search/check) and resource (functions). It distinguishes itself from siblings like get_codebase_map (structural overview) and query_dependencies (dependency graph) by focusing specifically on finding existing implementations to prevent duplicate code.

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?

Explicit 'CALL THIS WHEN:' section lists 4 specific trigger conditions (before creating functions, finding implementations, importing vs reimplementing, verifying existing functionality). It also includes 'WHY NOT JUST READ FILES' contrasting against grep alternatives, providing clear guidance on when to prefer this tool over simple file reading.

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

setup_environmentA
Read-only

Set up the optimal Claude Code environment for this codebase — install Pharaoh's curated plugin bundle.

CALL THIS WHEN: • The user says "set up my environment", "install plugins", or "optimize my setup" • You want to proactively improve the development experience with proven plugins • After noticing the user could benefit from LSP, security scanning, or code review tools

RETURNS: A curated list of recommended plugins with install commands, tailored to the languages in this codebase. Run the install commands to set everything up.

This is a one-time setup. Once installed, plugins persist across sessions.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.5/5.0
Behavior4/5

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

Annotations indicate read-only/destructive hints, but description adds critical behavioral context: explains return format ('curated list...with install commands'), scope ('tailored to the languages'), and persistence model ('one-time setup...persist across sessions'). Clarifies that tool returns commands rather than executing installation.

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?

Well-structured with clear sections: purpose statement, trigger conditions, return value documentation, and persistence note. Front-loaded with the core action. Slightly verbose but each sentence earns its place by specifying triggers or persistence behavior.

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?

No output schema exists, but description compensates by detailing what gets returned (plugin list with install commands) and execution model (user runs commands). Adequately complete for a zero-parameter setup tool.

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?

Zero parameters present, which per guidance warrants a baseline score of 4. No penalty applies since there are no parameters requiring semantic clarification beyond the empty schema.

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?

Description opens with specific verb ('Set up') + resource ('Claude Code environment') + specific deliverable ('Pharaoh's curated plugin bundle'). Clearly distinguishes from sibling tools which are all analysis/read-only tools (get_codebase_map, check_reachability, etc.) rather than setup/configuration tools.

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?

Contains explicit 'CALL THIS WHEN:' section with three specific trigger conditions, including exact user phrases to listen for ('set up my environment', 'install plugins') and proactive conditions (after noticing LSP needs). Provides concrete usage guidance without needing alternatives.

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

TDQS

A4.4/5.0
Disambiguation4/5

Most tools have clearly distinct purposes targeting specific codebase analysis tasks, such as reachability checking, blast radius assessment, or design system discovery. However, there is some potential overlap between 'get_blast_radius' and 'get_regression_risk', as both assess change impact, and between 'get_codebase_map' and 'pharaoh_recon', which both provide architectural overviews. Descriptions help differentiate these, but an agent might occasionally hesitate between them.

Naming Consistency4/5

The naming follows a consistent 'verb_noun' pattern for most tools (e.g., 'check_reachability', 'get_blast_radius', 'search_functions'), which is predictable and readable. Minor deviations include 'pharaoh_account', 'pharaoh_feedback', and 'pharaoh_recon', which use a 'pharaoh_' prefix instead of a verb, and 'setup_environment', which uses 'setup' instead of 'set_up'. These are understandable but break the overall pattern slightly.

Tool Count3/5

With 21 tools, the count is borderline high for a codebase analysis server, as it may feel heavy and overwhelming for agents. However, given the broad scope of tasks like architecture mapping, dependency tracing, dead code detection, and vision alignment, many tools are justified. A more streamlined set could improve usability without sacrificing functionality.

Completeness5/5

The tool set provides comprehensive coverage for codebase analysis and development workflows. It includes tools for initial mapping, deep module context, dependency queries, change impact assessment, duplication detection, test coverage, vision documentation, and setup. There are no obvious gaps; agents can perform end-to-end tasks from understanding architecture to safely implementing changes.

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
    A
    maintenance
    A remote Model Context Protocol server acting as middleware to the Sentry API, allowing AI assistants like Claude to access Sentry data and functionality through natural language interfaces.
    7
    45
    837
    MIT
  • A
    license
    A
    quality
    A
    maintenance
    A Model Context Protocol server that fetches up-to-date, version-specific documentation and code examples from libraries directly into LLM prompts, helping developers get accurate answers without outdated or hallucinated information.
    2
    879,513
    61,589
    MIT
  • A
    license
    Not graded
    quality
    D
    maintenance
    This read-only MCP Server allows you to connect to GitHub data from Claude Desktop through CData JDBC Drivers. For full CRUD support, check out the first managed MCP platform: CData Connect AI (https://www.cdata.com/ai/).
    MIT
  • A
    license
    Not graded
    quality
    F
    maintenance
    Provides AI-enhanced code search capabilities by integrating with Sourcegraph, allowing AI assistants to search across multiple repositories and codebases with advanced query syntax.
    40
    MIT

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/Pharaoh-so/pharaoh-mcp'

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