Orihime
Orihime is a cross-repository code knowledge graph server for analyzing Java/Kotlin/JavaScript/TypeScript codebases. It provides:
Call Graph & Navigation
Find callers/callees, trace blast radius (transitive impact of a change), resolve endpoint handlers, find implementations/superclasses, and discover external calls.
Discovery & Search
Search symbols by name, get source file locations, list repos/branches/endpoints, find unresolved REST calls, and view cross-service dependencies.
ORM/JPA Analysis
List entity relationships and detect EAGER-fetched collections that risk N+1 queries.
Security (SAST)
Detect taint sinks, single- and multi-hop taint flows, cross-service taint, second-order injection, and filter sinks reachable from real entry points. Generate compliance reports mapped to OWASP Top 10, CWE, PCI DSS, or STIG frameworks.
Complexity & Performance
Detect static complexity patterns (O(n²), N+1, recursion), rank I/O fan-out, ingest Gatling/JMeter results, identify hotspots by composite risk score, estimate capacity via Little's Law, and flag cascade risk from saturated downstream services.
License Compliance
Scan Maven/Gradle dependencies against SPDX identifiers to flag GPL/AGPL/LGPL or unknown licenses.
Indexing
Trigger incremental or full re-indexing of repositories from within the MCP session.
Supports indexing and analysis of Express.js applications, including endpoint discovery and call graph tracing.
Allows ingestion of Gatling load test results for performance correlation and capacity estimation per endpoint.
Enables scanning of Gradle dependencies for license compliance against SPDX identifiers.
Supports indexing and analysis of Next.js applications, including API routes and call graph.
Identifies RabbitMQ message listeners as entry points for taint analysis and call graph tracing.
Supports indexing and analysis of React components and their dependencies.
Orihime
A cross-repository code knowledge graph for Java/Kotlin/JavaScript/TypeScript codebases. Orihime indexes your source code into an embedded KuzuDB graph database using tree-sitter and exposes the graph through an MCP server (for AI assistants), a local web UI, and a CLI.
Mythology: Orihime (織姫) is Vega — the weaving princess who weaves the fabric of the cosmos. She weaves connections. The tool that weaves your codebase into a single graph.

What It Does
Call graph across repositories — who calls what, across service boundaries, including REST calls resolved to the endpoint they target
Cross-repo taint analysis — track user-controlled data from HTTP/Kafka/JMS entry points through the call graph to dangerous sinks (SQL injection, path traversal, XXE, deserialization, SSRF, log injection, …)
Security reports — OWASP Top 10, CWE, PCI DSS, STIG frameworks; second-order injection detection; custom sources/sinks via YAML
Entry-point reachability filtering — suppress false positives from dead code; only surface findings reachable from real entry points (HTTP handlers,
@KafkaListener,@Scheduled,@JmsListener,@RabbitListener)Complexity hints — static O(n²) loop detection, N+1 JPA risk, unbounded queries, recursive calls — no profiler needed
Performance correlation — ingest Gatling/JMeter load test results; correlate with the call graph to find confirmed hotspots and Little's Law capacity ceilings per endpoint
License compliance — scan Maven/Gradle dependencies against SPDX identifiers; flag GPL/AGPL/LGPL in commercial projects
Incremental re-index — git blob-hash-based skip; only changed files are re-parsed on subsequent runs
Multi-language — Java, Kotlin, JavaScript, TypeScript (Next.js, Express, React)
Related MCP server: code-graph-mcp
Quick Start — AI-first (Claude Code)
The primary way to use Orihime is through an AI assistant via MCP. You index once, then ask questions in natural language — no Cypher, no grep, no reading source files.
1. Install
git clone https://github.com/srinivasan-sundaresan95/orihime.git
cd orihime
pip install -e .2. Register with Claude Code (one-time setup)
python -m orihime register # writes MCP server entry to ~/.claude/settings.json
python -m orihime install-skills # copies Claude Code skills to ~/.claude/skills/Restart Claude Code. The orihime MCP tools and skills (/orihime-call-flow, /orihime-security-audit, /orihime-perf-analysis, /orihime-change-impact) are now active.
3. Index your repositories
python -m orihime index --repo /path/to/your/service-a --name service-a
python -m orihime index --repo /path/to/your/service-b --name service-b4. Ask questions
Trace the call flow for GET /api/orders in service-a
Find SQL injection risks in service-b
What breaks if I change OrderService.processPayment?
Which endpoints are approaching saturation?No source file reads. No grep. Claude uses the graph directly — typically 5–8 tool calls vs 30+ for source-only analysis.
CLI alternative: All operations above are also available as Python commands (
python -m orihime index,python -m orihime ui, etc.) if you prefer working outside an AI assistant. See CLI Reference below.
Feature Comparison
Capability | Orihime | GitNexus | SonarQube Community | SonarQube Developer | SonarQube Enterprise |
Cross-repo call graph | ✓ | ✓ | ✗ | ✗ | ✗ |
REST endpoint resolution | ✓ | ✓ | ✗ | ✗ | ✗ |
MCP integration (AI assistants) | ✓ | ✓ | ✓¹ | ✓¹ | ✓¹ |
Claude Code hooks + skills | ✓ | ✓ | ✗ | ✗ | ✗ |
Cross-file taint (SAST / injection) | ✓ | ✗ | ✗ | ✓ | ✓ |
Second-order injection | ✓ | ✗ | ✗ | ✗ | ✗ |
Entry-point reachability filter | ✓ | ✗ | ✗ | ✗ | ✗ |
Custom sources/sinks (YAML) | ✓ | ✗ | ✗ | ✗ | ✓² |
OWASP/CWE/PCI/STIG compliance reports | ✓ | ✗ | ✗ | ✗ | ✓ |
Argument-level taint (value-flow) | ✓ | ✗ | ✗ | ✗ | ✗ |
Complexity hints (O(n²), N+1) | ✓ | ✗ | partial | partial | partial |
I/O fan-out + serial/parallel analysis | ✓ | ✗ | ✗ | ✗ | ✗ |
Perf ingestion + capacity model | ✓ | ✗ | ✗ | ✗ | ✗ |
Cross-service cascade risk | ✓ | ✗ | ✗ | ✗ | ✗ |
License compliance | ✓ | ✗ | ✗ | ✗ | ✓³ |
Embedded DB (no server daemon) | ✓ | ✓ | ✗ | ✗ | ✗ |
Indexes Java / Kotlin | ✓ | ✓ | ✓ | ✓ | ✓ |
Indexes JS / TS | ✓ | ✓ | ✓ | ✓ | ✓ |
License | MIT | PolyForm NC | LGPL | Commercial | Commercial |
¹ Via the official sonarqube-mcp-server (SonarSource, production-ready). Works with all SonarQube editions. ² Custom taint sources/sinks require the Advanced Security add-on (Enterprise+). ³ License compliance (SBOM + policy enforcement) requires the Advanced Security add-on (Enterprise+).
GitNexus (PolyForm Non-Commercial) provides cross-repo call graphs and MCP integration across 14 languages including Java and Kotlin. It does not cover SAST, perf analysis, or compliance reporting.
MCP Tools Reference
Call Graph
Tool | Description |
| All methods that call the given method |
| All methods called by the given method |
| Transitive set of callers up to N hops |
| Trace back from an HTTP endpoint to its callers |
| All classes implementing an interface |
| Inheritance chain |
| All calls to methods outside the indexed repo |
Discovery
Tool | Description |
| Full-text search across class/method FQNs |
| File path and line number for any class or method |
| All indexed repositories |
| All indexed branches for a repo |
| All HTTP endpoints in a repo |
| REST calls that couldn't be matched to an endpoint |
| Cross-service DEPENDS_ON edges |
ORM / JPA
Tool | Description |
| All JPA entity relationships — also used in design review (Phase 1.5) |
| EAGER-fetched collections (N+1 risk) |
Security (SAST)
Tool | Description |
| All taint sinks reachable in the call graph |
| Value-flow taint: argument → parameter across CALLS edges |
| Taint that crosses service boundaries via REST |
| Taint stored to DB then re-read and used as sink |
| All HTTP/Kafka/Scheduled/JMS/RabbitMQ entry points |
| Taint sinks filtered to those reachable from entry points only |
| Report in OWASP / CWE / PCI / STIG format |
| Show active sources, sinks, and sanitizers from YAML config |
Complexity & Performance
Tool | Description |
| Methods flagged with O(n²), N+1, unbounded-query, recursive |
| Load Gatling simulation.log, JMeter XML, or JSON perf data |
| Complexity hints × p99 latency, sorted by risk score |
| Little's Law capacity per endpoint; flags near-saturation |
| Cross-service cascade: upstream endpoints limited by downstream saturation |
License Compliance
Tool | Description |
| Flag GPL/AGPL/LGPL dependencies via Maven Central |
Index
Tool | Description |
| Trigger an index from within the MCP session |
CLI Reference
All operations are also accessible directly without an AI assistant:
python -m orihime index --repo PATH --name NAME [--db PATH] [--force] [--branch NAME]
python -m orihime ui [--port 7700] [--db PATH]
python -m orihime serve
python -m orihime serve-sse [--port 7702] [--db PATH]
python -m orihime resolve [--db PATH]
python -m orihime write-server [--port 7701] [--db PATH]
python -m orihime register [--db PATH] [--python PATH]
python -m orihime install-skillsCommand | Description |
| Parse a repository and write its graph into KuzuDB |
| Start the local web UI on port 7700 |
| Start the MCP server on stdio (for Claude Code, Claude Desktop, any MCP client) |
| Start the MCP server with SSE transport (for CI runners and remote clients) |
| Match RestCall URL patterns against Endpoints across all indexed repos |
| Start the write-serialization server for team/server deployments |
| Write the Orihime MCP server entry to |
| Copy bundled skills to the target AI assistant's config dir ( |
Web UI
http://localhost:7700Page | Description |
| Call graph explorer: search methods, trace callers/callees, visualize CALLS graph |
| Security + complexity findings table — filter by OWASP category, severity, file |
| JSON endpoints backing the UI (also usable directly) |
Configuration
Environment Variables
Variable | Default | Description |
|
| Path to KuzuDB database directory |
| (unset) | URL of the write-serialization server (team mode) |
Custom Sources and Sinks
Create ~/.orihime/security_config.yaml (or set ORIHIME_SECURITY_CONFIG):
sources:
- method_pattern: ".*getCustomUserInput"
description: "Custom input source"
sinks:
- method_pattern: ".*legacyExec"
sink_type: "COMMAND_INJECTION"
description: "Legacy shell executor"
sanitizers:
- method_pattern: ".*sanitizeForLegacy"The built-in config covers HttpServletRequest, @RequestParam, @PathVariable, @RequestBody, JDBC execute*, JPA native queries, Runtime.exec, ProcessBuilder, XML parsers, ObjectInputStream, Files.get, Paths.get, new URL, logging calls, and more.
Documentation
Doc | Description |
All MCP tools with parameters and examples | |
How Java/Kotlin/JS/TS are parsed; ExtractResult schema | |
Custom sources, sinks, sanitizers — YAML reference | |
GitHub Actions PR review workflow setup | |
Docker Compose setup for server deployments | |
How to add a new language extractor | |
How REST calls are matched to endpoints across repos |
Team / Server Mode
KuzuDB has a single-writer constraint. In team deployments where multiple developers re-index simultaneously, run the write-serialization server:
# On the shared server — owns the KuzuDB connection
python -m orihime write-server --port 7701 --db /shared/orihime.db
# Each developer's indexer sends writes to the server
ORIHIME_SERVER_URL=http://server:7701 python -m orihime index --repo /path --name my-serviceDevelopers running locally without ORIHIME_SERVER_URL open KuzuDB directly as always. The web UI and MCP server always read directly from KuzuDB (reads do not go through the write server).
Architecture
Source files
│
▼ tree-sitter (Java, Kotlin, JS, TS)
ParseResult (plain Python dicts, picklable)
│
▼ ProcessPoolExecutor (parallel parse workers)
Phase 2: KuzuDB writes (batched by table, 500-edge transactions)
│
▼
KuzuDB embedded graph ←──────────────────────────────┐
│ │
├── MCP server (FastMCP, stdio) │
├── Web UI (Starlette, port 7700) │
└── Write server (FastAPI, port 7701, team mode) ──┘Graph schema (SCHEMA_VERSION 10):
Node | Key fields |
| id, name, root_path |
| path, language, blob_hash, branch_name |
| fqn, annotations, is_interface |
| fqn, line_start, annotations, is_entry_point, complexity_hint |
| http_method, path, path_regex |
| http_method, url_pattern |
| source_class, target_class, fetch_type, relation_type |
| endpoint_fqn, p50_ms, p99_ms, rps, source |
| endpoint_fqn, saturation_rps, ceiling_concurrency, risk_level |
Relationship | Description |
| Method → Method; carries callee_name, caller_arg_pos, callee_param_pos |
| Method → Endpoint (resolved cross-service call) |
| Method → RestCall (not yet resolved) |
| File → Class |
| Class → Method |
| Repo → Endpoint |
| Repo → Repo (cross-service dependency) |
| Class → Class |
| Class → Class |
| Class → EntityRelation |
| Method → PerfSample |
Performance
Query performance (graph DB)
Benchmarked on an 845-file Java/Kotlin service:
Operation | Time |
Cold index | ~67s |
Incremental re-index (no changes) | ~34s |
| <5ms |
| <15ms |
| <25ms |
Batch write speedup vs naive per-row writes: 12×.
AI assistant benchmark — tracing a single call flow
Java/Kotlin codebase (845 + 224 files, measured)
Benchmarked on a 845-file Kotlin service and a 224-file Java service, tracing one controller endpoint through service → repositories → upstream APIs. GitNexus v1.6.3, Orihime v1.9, and a grep+source-read baseline were all measured on the same codebase on the same hardware (WSL2/Ubuntu, Intel i7, 2026-04-30).
Approach | Cold index | Query latency | Avg tokens/query | Files read |
Baseline — Claude reads source files directly | — | ~4–5 min | ~14,000 | 27 |
GitNexus v1.6.3 | 51.4s | 2–10s⁴ | ~1,490 | 0 |
Orihime v1.9 | 66.6s | 3–22ms | ~683 | 0 |
Orihime vs baseline: 95% fewer tokens · 200–1,400× faster queries
Orihime vs GitNexus: 2.2× fewer tokens · 200–1,400× faster queries · MCP-native
The 7 Orihime tool calls produced ~80% of the structural picture (full controller→service→repo→upstream chain, 27 test methods surfaced, resilience wiring discovered automatically). The remaining ~20% — upstream API URLs, auth headers, branch-level control flow — requires targeted source reads, scoped to ~5 specific files rather than 27.
GitNexus's cold index is ~1.3× faster on NTFS (Node.js parse throughput advantage). On native Linux this gap narrows to near parity.
⁴ GitNexus query latency is dominated by live GitHub API round trips (1–3 per query × 500–2,000ms each, rate-limit dependent). Blast radius returned results in the wrong direction (upstream imports rather than downstream dependents).
License
MIT
Available Tools
33 toolsblast_radiusA
Find all methods transitively affected by changing the given method.
Performs a breadth-first traversal of CALLS edges in reverse
(callers of callers) up to *max_depth* hops.
Args:
method_fqn: FQN of the method being changed, e.g. ``com.example.Foo.bar``.
max_depth: Maximum number of hops to traverse (default 3, max 10).
exclude_generated: When True, filter out Lombok/compiler-generated callers.
Returns:
List of dicts with keys ``fqn``, ``file_path``, and ``depth``.
Depth 1 = direct callers, depth 2 = their callers, etc.
The changed method itself is not included.
| Name | Required | Description | Default |
|---|---|---|---|
| method_fqn | Yes | ||
| max_depth | No | ||
| exclude_generated | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description fully discloses behavior: it uses BFS traversal of CALLS edges in reverse, respects max_depth, excludes the changed method, and lists return keys (fqn, file_path, depth). This gives the agent a complete understanding of the tool's operation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with clear Args and Returns sections, but it is slightly verbose. Every sentence adds value, though the format could be tightened. Overall, it communicates efficiently.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with three parameters and an output schema, the description covers all aspects: parameter meanings, behavior (BFS, exclusion of changed method), and return structure. It is complete and leaves no critical gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description must carry the burden. It explains method_fqn format with an example, max_depth default and max limit, and exclude_generated purpose. This adds significant meaning beyond the schema's type information.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states 'Find all methods transitively affected by changing the given method.' It specifies the action (find), resource (methods), and context (transitively affected by change), which distinguishes it from siblings like find_callers that likely provide only direct callers.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description does not explicitly provide when or when-not to use this tool compared to alternatives. While the purpose is clear, it lacks guidance on when to choose this over sibling tools like find_cascade_risk or find_taint_flows, leaving the agent to infer from the description alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
estimate_capacityA
Estimate capacity per endpoint using Little's Law.
concurrency = RPS x (p99_ms / 1000)
saturation_rps = thread_pool_size / (p99_ms / 1000)
Risk levels (based on current_rps / saturation_rps):
CRITICAL > 80%
HIGH > 60%
MEDIUM > 40%
LOW otherwise
Args:
repo_name: The logical name of the indexed repository.
Returns:
List of dicts: ``endpoint_fqn``, ``current_rps``, ``p99_ms``,
``saturation_rps``, ``ceiling_concurrency``, ``risk_level``.
| Name | Required | Description | Default |
|---|---|---|---|
| repo_name | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full burden. It discloses the formulas, risk level thresholds, and return structure, providing sufficient transparency about tool behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured: starts with a summary, then formulas, risk levels, parameters, and returns. Every part earns its place without unnecessary verbosity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the presence of an output schema, the description adequately explains return values and tool usage. It covers all necessary aspects for an agent to invoke the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The only parameter 'repo_name' has 0% schema description coverage, but the description explains it as 'logical name of the indexed repository', adding meaningful context beyond the schema field.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it estimates capacity per endpoint using Little's Law, listing formulas. It uniquely identifies the tool's purpose among siblings, as no other sibling tool focuses on capacity estimation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explains the functionality and provides formulas and risk levels, but does not explicitly state when to use it over alternatives. However, the context of sibling tools and the specific formulas make the usage clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
find_calleesA
Find all methods directly called by the given method.
Args:
method_fqn: Fully-qualified method name, e.g. ``com.example.Foo.bar``.
exclude_generated: When True, filter out Lombok/compiler-generated callees.
Returns:
List of dicts with keys ``fqn``, ``file_path``, ``line_start``.
Empty list if the method is not found or makes no calls.
| Name | Required | Description | Default |
|---|---|---|---|
| method_fqn | Yes | ||
| exclude_generated | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It discloses the return format (list of dicts with keys fqn, file_path, line_start) and edge cases (empty list if method not found or makes no calls). It does not discuss side effects or performance, but for a read-only lookup, this is adequate.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the purpose, then uses standard Args/Returns sections for clarity. It is concise—every sentence adds value—and uses proper formatting (backticks for code, bullet-like structure) to aid readability.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's low complexity (2 parameters, no nested objects) and the presence of an output schema (though not shown here), the description covers all necessary aspects: input format, behavior of each parameter, return structure, and edge cases. It is complete for an agent to use correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 0% description coverage (only titles and types), but the description adds significant meaning: method_fqn gets a format example ('com.example.Foo.bar'), and exclude_generated gets a concrete use case (filtering Lombok/compiler-generated callees). This fully compensates for the schema's lack of descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Find all methods directly called by the given method.' It uses a specific verb ('find') and resource ('methods directly called'), distinguishing it from sibling tools like find_callers (which does the inverse) and find_implementations (which finds overrides).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description specifies that it finds direct callees, implying when to use it (to explore a method's immediate dependencies). It does not explicitly state when not to use it or mention alternatives, but the wording 'directly called' provides clear context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
find_callersA
Find all methods that directly call the given method.
Args:
method_fqn: Fully-qualified method name, e.g. ``com.example.Foo.bar``.
exclude_generated: When True, filter out Lombok/compiler-generated callers.
Returns:
List of dicts with keys ``fqn``, ``file_path``, ``line_start``.
Empty list if the method is not found or has no callers.
| Name | Required | Description | Default |
|---|---|---|---|
| method_fqn | Yes | ||
| exclude_generated | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description explains the return format and the effect of the exclude_generated parameter, and mentions empty list conditions. However, it does not disclose side effects, error behavior, or performance implications. Without annotations, this is a minor gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is very concise, using a clear Args/Returns structure. Every sentence is informative, with no redundancy or extraneous text.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers the return structure and parameter behavior well. However, it lacks details on whether the tool is read-only or has side effects, which would be helpful given no annotations. The mention of 'directly call' sufficiently clarifies scope.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description adds significant meaning beyond the schema: for method_fqn, it provides a concrete example of the required format; for exclude_generated, it explains its filtering behavior. This fully compensates for the schema's lack of parameter descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool finds all methods that directly call a given method, with a specific verb and resource. It distinguishes from sibling tools like find_callees by focusing on callers rather than callees.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit guidance is provided on when to use this tool versus alternatives. It does not mention when to use find_callees or other sibling tools, leaving the agent to infer from context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
find_cascade_riskA
Find upstream endpoints at cascade risk from saturated downstream services.
Walks CALLS_REST edges: if Method A (in repo_name) calls Endpoint B (in
another repo) and B's corresponding PerfSample has a lower saturation_rps
than A's current_rps, A is flagged as being at cascade risk.
saturation_rps for endpoint B = thread_pool_size / (p99_ms / 1000).
Args:
repo_name: The logical name of the upstream repository to analyse.
Returns:
List of dicts: ``upstream_method_fqn``, ``downstream_endpoint``,
``downstream_saturation_rps``, ``upstream_current_rps``,
``risk`` (``"SATURATED"`` or ``"NEAR_SATURATION"``).
| Name | Required | Description | Default |
|---|---|---|---|
| repo_name | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full disclosure burden. It transparently explains the algorithm, including the formula for saturation_rps, and lists the return fields with meaning. It does not mention permissions, side effects, or data sources, but given the analytical nature, these omissions are minor. The description is largely adequate for understanding behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with a clear first sentence and subsequent details including algorithm, formula, args, and returns. It is concise enough (roughly 100 words) without redundant information, but the inclusion of the formula could be simplified if the return fields already imply the computation. Still, it earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the simplicity (single parameter, no annotations, output schema present), the description is complete. It explains the tool's purpose, algorithm, parameter meaning, and return structure including risk levels. No major gaps remain: an agent can confidently use this tool based solely on the description.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, but the description compensates fully. It defines the sole parameter repo_name as 'The logical name of the upstream repository to analyse,' adding semantic context beyond the schema's type and title. The Arg section in the description provides a clear explanation, satisfying the parameter semantics needs.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description starts with a clear statement of what the tool does: 'Find upstream endpoints at cascade risk from saturated downstream services.' It then details the algorithm, including walking CALLS_REST edges and comparing saturation_rps to current_rps, which distinguishes it from sibling tools like blast_radius or find_callees that have different focuses.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explains the specific condition under which a risk is flagged (saturation_rps < current_rps), providing implicit guidance on when to use the tool. However, it does not explicitly contrast with alternatives (e.g., when to use find_callees vs. this tool) or state prerequisites like having perf data ingested, limiting the guidance value.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
find_complexity_hintsA
Return methods with complexity hints, sorted by CALLS in-degree descending.
Detects static complexity patterns stored on Method nodes during indexing:
O(n2)-candidate, O(n2)-list-scan, recursive, n+1-risk, unbounded-query.
Args:
repo_name: Repository to query.
min_severity: Severity filter:
``"low"`` — include all hints
``"medium"`` — exclude hints that are ONLY ``recursive``
``"high"`` — only include hints containing ``O(n2)`` or ``n+1-risk``
Returns:
List of dicts: ``method_fqn``, ``file_path``, ``line_start``,
``complexity_hint``, ``call_degree``.
Sorted by ``call_degree`` descending (most-called methods first).
| Name | Required | Description | Default |
|---|---|---|---|
| repo_name | Yes | ||
| min_severity | No | medium |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, but the description discloses the sorting order, the list of complexity patterns detected, and the effect of min_severity. It is transparent about the tool's behavior as a read-only query.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is succinct, well-structured with summary, pattern list, args, and returns. Every sentence is purposeful.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has 2 parameters and an output schema described, the description covers purpose, parameters, output format, and behavior. It lacks edge case handling but is sufficient for most queries.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, but the description adds detailed semantics for min_severity with filtering logic, and describes repo_name minimally. This compensates well for the lack of schema descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it returns methods with complexity hints sorted by call in-degree, distinguishing it from sibling analysis tools that focus on different patterns like callers, callees, or taint flows.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides clear usage context via the min_severity parameter behavior, but does not explicitly contrast with sibling tools; however, the naming and description make the use case clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
find_cross_service_taintA
Find taint paths from HTTP endpoint handler parameters to outgoing REST calls.
This is an Orihime-native equivalent of SonarQube Enterprise "Advanced SAST"
cross-service taint analysis.
A taint path is a call chain that starts at an HTTP endpoint handler method
(whose parameters are user-controlled: @RequestParam, @PathVariable, @RequestBody)
and ends at a method that issues an outgoing HTTP call (UNRESOLVED_CALL or
CALLS_REST edge). Intermediate hops are method CALLS edges.
Args:
repo_name: Repository to analyse.
max_depth: Maximum call-chain depth to traverse (default 6).
Returns:
List of dicts, each describing one taint path::
{
"source_handler_fqn": str, # endpoint handler method
"source_endpoint": str, # HTTP path e.g. GET /api/users/{id}
"sink_method_fqn": str, # method that makes the outgoing call
"sink_url_pattern": str, # URL pattern of the outgoing call
"sink_http_method": str, # GET/POST/...
"path_length": int, # number of hops
"call_chain": list, # [method_fqn, ...] from source to sink
}
| Name | Required | Description | Default |
|---|---|---|---|
| repo_name | Yes | ||
| max_depth | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Given no annotations, the description explains the behavioral process: traversing call chains from HTTP handlers to outgoing calls via CALLS edges, and defines the output format. It does not mention prerequisites or side effects, but the read-only analytical nature is clear.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with a brief summary, detailed explanation, Args and Returns sections. It is concise, front-loaded with the main purpose, and every sentence adds value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers purpose, parameters, and output schema well. It lacks mention of prerequisites like requiring the repo to be indexed, but overall it provides sufficient context for a complex analysis tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, but the description adds descriptions for both parameters: repo_name as 'Repository to analyse' and max_depth with default and explanation. This adds meaningful context beyond the bare schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool finds taint paths from HTTP endpoint handler parameters to outgoing REST calls. It specifies the verb 'find', the resource 'taint paths', and narrows the scope to cross-service analysis, differentiating from generic taint analysis tools like find_taint_paths.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies the tool is for cross-service taint analysis but does not explicitly state when to use it over siblings like find_taint_paths, find_taint_flows, or find_taint_sinks. No when-not or alternative guidance is provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
find_eager_fetchesA
Find all EAGER fetch relationships — potential N+1 query sources.
Returns list of dicts with source_class_fqn, field_name, relation_type,
target_class_fqn for all relations where fetch_type = 'EAGER'.
| Name | Required | Description | Default |
|---|---|---|---|
| repo_name | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full responsibility. It explains the behavior (finding eager fetches and returning a list) and output structure, but it does not disclose whether the operation is read-only, whether it requires authentication, or if it has side effects. It is reasonable to infer read-only, but explicit confirmation is missing.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences totaling ~25 words, with no fluff. The first sentence states the core purpose, and the second lists output fields. It is front-loaded and efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given one simple parameter and an output schema (which likely documents return structure), the description covers the main functionality well. The only shortcoming is the missing parameter explanation, but overall it is nearly complete for a straightforward analysis tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The sole parameter repo_name is not described in the description. With 0% schema description coverage, the description should compensate by explaining its meaning or format. While repo_name may be common across tools, the lack of any parameter guidance reduces clarity.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: finding all EAGER fetch relationships, which are potential N+1 query sources. It also specifies the return format (list of dicts with specific fields). This distinguishes it from sibling tools like find_callees or find_taint_flows.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit when-to-use or when-not-to-use guidance is given. The description implies usage for analyzing ORM performance, but it does not mention prerequisites, alternatives, or exclusions. Among sibling tools with similar scope, more guidance would be helpful.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
find_endpoint_callersA
Find the handler method for an endpoint and all upstream callers.
Args:
http_method: HTTP verb — GET, POST, PUT, DELETE, or PATCH (case-insensitive).
path_pattern: Exact path of the endpoint, e.g. ``/api/users/{id}``.
Returns:
List of dicts with keys ``role`` (``"handler"`` or ``"caller"``),
``fqn``, ``file_path``, ``line_start``.
Empty list if the endpoint is not found.
| Name | Required | Description | Default |
|---|---|---|---|
| http_method | Yes | ||
| path_pattern | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description discloses the return format and empty-list behavior, but does not explicitly state whether the tool is read-only, list side effects, or require authentication. It is adequate but not thorough.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise (about 7 lines) with a clear structure: purpose, args, returns. Every sentence adds value, no redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (2 params, no nested objects, output schema exists), the description covers the core functionality and return format. It misses potential prerequisites (e.g., repo indexing) but is otherwise complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description adds significant meaning beyond the 0% schema coverage by specifying allowed HTTP methods (case-insensitive) and the exact path pattern format (e.g., '/api/users/{id}'). This compensates well for the lack of schema descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool finds the handler method for an endpoint and all upstream callers, which is a specific and distinct purpose among sibling tools like find_callers or find_entry_points.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is given on when to use this tool versus its siblings (e.g., find_callers or find_taint_flows). The description lacks context about prerequisites or alternative tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
find_entry_pointsB
Return all methods/endpoints marked as entry points (is_entry_point=true).
Entry points include HTTP handler methods, @KafkaListener, @Scheduled,
@JmsListener, and @RabbitListener methods.
Args:
repo_name: Repository to query.
Returns:
List of dicts with keys ``fqn``, ``file_path``, ``line_start``,
``annotations``.
| Name | Required | Description | Default |
|---|---|---|---|
| repo_name | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must disclose behavioral traits. It only states the output format and input, but does not mention that it is a read-only operation or any side effects, leaving the agent uninformed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise with a clear Docstring structure (Args, Returns), front-loading the main purpose. No unnecessary words, but it could be slightly more structured.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite lacking usage guidelines, the description sufficiently covers the tool's purpose, input, and output format. The presence of an output schema (not shown) reduces the burden, making it fairly complete for a simple query tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has zero description coverage (0%), so the description must compensate. It mentions 'repo_name: Repository to query' which adds minimal detail beyond the parameter name, not enough for full clarity.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool returns methods/endpoints marked as entry points, listing specific types (HTTP handler, @KafkaListener, etc.), which distinguishes it from sibling tools like find_hotspots or list_endpoints.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description does not provide guidance on when to use this tool instead of alternatives, lacking context like when to prefer it over similar tools like list_endpoints or find_callees.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
find_external_callsA
Return all calls to methods NOT in the indexed repo (callee has no Method node).
These are calls to external libraries, frameworks, or unindexed services.
Returns [{caller_fqn, callee_name, call_count}] sorted by call_count descending.
Useful for: "what external dependencies does this service actually call at runtime?"
Args:
repo_name: The logical name of the indexed repository.
Returns:
List of dicts with keys ``caller_fqn``, ``callee_name``, ``call_count``.
Empty list if the repo is not found or has no external calls.
| Name | Required | Description | Default |
|---|---|---|---|
| repo_name | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description fully explains the output format, sorting, and empty list behavior. It is transparent about what the tool does and returns.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise and well-structured: purpose, output, usage hint, parameters, returns. Every sentence adds value, no fluff.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple query tool with one parameter and an output schema, the description covers purpose, behavior, and return format completely. No missing context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The only parameter, repo_name, is described as 'the logical name of the indexed repository', adding essential meaning beyond the schema's type-only definition. With 0% schema coverage, the description compensates fully.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool returns calls to methods not in the indexed repo, distinguishing it from siblings like find_callees or find_callers. The verb 'find_external_calls' and the explanation make the purpose unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description includes a useful usage hint ('what external dependencies...'), but lacks explicit direction on when not to use or specific alternatives among the many sibling tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
find_hotspotsA
Return methods ranked by composite risk: complexity_hint x p99.
Methods with both a complexity hint AND high p99 latency are ranked highest.
Methods that have a complexity hint but no perf data are included with
p99_ms=null and risk_score = hint_weight * 100.
Args:
repo_name: The logical name of the indexed repository.
Returns:
List of dicts: ``method_fqn``, ``complexity_hint``, ``p99_ms``,
``p50_ms``, ``risk_score``, ``file_path``, ``line_start``.
Sorted by risk_score descending.
| Name | Required | Description | Default |
|---|---|---|---|
| repo_name | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries full burden. It reveals behavioral traits: includes methods without perf data, details risk calculation, and specifies sorting order. However, it does not explicitly state if the operation is read-only or if it requires special permissions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with clear sections for purpose, logic, args, and returns. It is reasonably concise, though the return format could have been omitted if an output schema were provided.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description fully covers the tool's behavior, parameter, and output format. Given the absence of an output schema, the description compensates by detailing the return fields and sorting. It is complete for the tool's complexity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema has 1 parameter with 0% description coverage. The description adds crucial meaning: 'The logical name of the indexed repository.' This clarifies the expected value beyond the bare schema field name.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: 'Return methods ranked by composite risk: complexity_hint x p99.' It distinguishes from siblings like find_complexity_hints by combining complexity and latency into a composite risk score.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explains the ranking logic and what methods are included (those with and without perf data). However, it lacks explicit guidance on when to use this tool versus sibling tools such as find_complexity_hints or find_callees.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
find_implementationsA
Find all classes that directly implement the given interface (up to 10 hops via IMPLEMENTS).
Args:
interface_fqn: FQN of the interface, e.g. ``com.example.WalletService``.
Returns:
List of dicts with keys ``class_fqn``, ``class_name``, ``file_path``, ``repo_name``.
| Name | Required | Description | Default |
|---|---|---|---|
| interface_fqn | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the burden. It explains the hop limit but has a slight contradiction between 'directly implement' and 'via IMPLEMENTS' hops, leaving ambiguity about transitive results. No permissions or performance mentioned.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is short, structured with Args and Returns, and contains no fluff. However, the 'directly' vs 'hops' wording could be clarified.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool simplicity (one parameter) and presence of an output schema, the description covers the main use case and return format. It lacks detail on hop behavior and error cases, but is sufficient for a query tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description adds the parameter format and example ('interface_fqn: FQN of the interface, e.g. com.example.WalletService'), compensating for the 0% schema coverage. This adds meaning beyond the schema's simple type declaration.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Find all classes that directly implement the given interface' with a specific verb and resource, along with the hop limit. This distinguishes it from siblings like 'find_superclasses' which does the reverse.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for finding implementing classes but does not explicitly mention alternatives or when not to use it. The hop limit provides some context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
find_io_fanoutA
Return entry-point methods ranked by I/O call count, with serial/parallel breakdown.
For each HTTP/Kafka/Scheduled entry point, reports the total number of I/O
operations (DB + HTTP + cache) detectable in its method body, split into
serial (latency adds) and parallel (latency = max of group).
If perf data has been ingested via ingest_perf_results, also estimates
latency_floor_ms = sum(serial p99s) + max(parallel p99s).
Args:
repo_name: Repository to query.
min_total: Only return methods with at least this many I/O calls (default 2).
Returns:
List of dicts: endpoint_path, http_method, handler_fqn, file_path,
line_start, total_io, serial_io, parallel_io, parallel_wrapper, latency_floor_ms.
Sorted by total_io descending.
| Name | Required | Description | Default |
|---|---|---|---|
| repo_name | Yes | ||
| min_total | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, description explains the breakdown, latency estimation condition, and result sorting. However, it omits potential limitations (e.g., static analysis only, dependency on indexing), and does not state read-only nature.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Description is well-structured with paragraphs for purpose, detail, parameters, and output. Slightly verbose but front-loaded with the core purpose. Could be shortened by merging parameter explanations.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity and lack of output schema, description provides return fields, sorting order, and prerequisite for latency calculation. Omits if results are real-time or cached, but overall comprehensive for a query tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, but description adds meaning for both parameters. It explains repo_name as repository to query and min_total with default and purpose, complementing the sparse schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states 'Return entry-point methods ranked by I/O call count, with serial/parallel breakdown.' It identifies the specific resource and metric, setting it apart from siblings like find_entry_points.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Description mentions when latency estimation is available (if perf data ingested) but lacks explicit when-not-to-use or comparisons to sibling tools like find_complexity_hints. No guidance on when not to use.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
find_license_violationsA
Check dependencies in the repo for license compliance.
Looks for pom.xml and build.gradle/build.gradle.kts in the repo root.
Queries Maven Central for each dependency's license.
Args:
repo_name: The logical name of the indexed repository.
allowed: List of SPDX license IDs to allow
(default: MIT, Apache-2.0, BSD-*, ISC, etc.).
license_overrides: Maps "group:artifact" to a license SPDX string to
bypass Maven Central lookups (useful for testing or
when a known license is not in Maven Central metadata).
Returns:
List of dicts [{group, artifact, version, license, status, reason}]
where status is "OK", "VIOLATION", "WARNING", or "UNKNOWN".
Only VIOLATION and WARNING items are returned (OK items filtered out).
| Name | Required | Description | Default |
|---|---|---|---|
| repo_name | Yes | ||
| allowed | No | ||
| license_overrides | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries full burden. Discloses files scanned, query source, and return format including filtering of OK items. Lacks details on error handling or performance.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Well-structured with summary, details, args, and returns. Slightly lengthy but each sentence adds value. Front-loaded with main purpose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Covers purpose, parameters, return values, and behavior. Missing error scenarios, but output schema handles status. Reasonably complete for a compliance check tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, but description compensates fully: explains repo_name, allowed defaults, and license_overrides bypass mechanism, adding significant meaning beyond schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states 'Check dependencies in the repo for license compliance', providing a specific verb and resource. Distinct from sibling tools which focus on code analysis.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Clear context on when to use (for license compliance) and what inputs are needed. No explicit alternatives mentioned, but no sibling tool serves the same purpose.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
find_reachable_sinksA
Return taint sinks reachable from entry points via CALLS edges.
When show_all=False (default), only returns sinks reachable from an entry
point. When show_all=True, returns all sinks (same as find_taint_sinks).
Uses BFS from all entry points through CALLS edges to build a reachable
method ID set, then filters find_taint_sinks results to only those whose
caller method is reachable from an entry point.
Args:
repo_name: Repository to analyse.
show_all: When True, skip reachability filtering and return all sinks.
Returns:
List of dicts with keys ``caller_fqn``, ``sink_method``, ``file_path``,
``line_start``, ``sink_category``.
| Name | Required | Description | Default |
|---|---|---|---|
| repo_name | Yes | ||
| show_all | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It explains the algorithm (BFS from entry points, filtering) and the return format with keys. This provides sufficient behavioral context, though it could mention side effects or performance considerations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is structured with sections (Args, Returns) and is front-loaded with the core purpose. It is slightly verbose but well-organized, with no wasted sentences.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description fully explains the tool's purpose, parameters, algorithm, and return format. Despite the lack of an explicit output schema, the returned keys are detailed. It provides complete context for an AI agent to use the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description explicitly documents both parameters (repo_name and show_all) with their meanings and defaults, compensating for the 0% schema description coverage. It adds value by specifying the effect of show_all.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool returns taint sinks reachable from entry points via CALLS edges. It distinguishes itself from the sibling tool 'find_taint_sinks' by explaining the show_all parameter, making the purpose specific and unique.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explains when to use show_all=False vs True, and notes that show_all=True behaves like 'find_taint_sinks'. However, it does not explicitly state when not to use this tool or provide guidance on alternatives like 'find_taint_flows' or 'find_taint_paths'.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
find_repo_dependenciesA
Find all repositories that the given repository directly depends on.
Args:
repo_name: The logical name of the repository as indexed (e.g. ``point-bank-bff``).
Returns:
List of dicts with key ``name`` for each dependency repo.
Empty list if the repo is not found or has no declared dependencies.
| Name | Required | Description | Default |
|---|---|---|---|
| repo_name | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It discloses that the tool returns a list of dicts with a 'name' key, and handles missing repos or no dependencies gracefully by returning an empty list. It does not mention side effects, permissions, or rate limits, but for a read-only operation this is sufficient.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise with two short sections: one for the main purpose and one for arguments/returns. Every sentence adds value, there is no fluff, and the key information is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with a single parameter and an output schema (implied by 'has output schema: true'), the description fully explains the return format and edge cases (empty list for not found or no dependencies). No further context is needed for an agent to invoke it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The sole parameter 'repo_name' has zero schema description coverage, but the description adds meaning by saying 'The logical name of the repository as indexed' and providing an example ('point-bank-bff'). This goes beyond the schema's 'Repo Name' title and clarifies what kind of name is expected.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool finds all repositories that the given repository directly depends on. It uses a specific verb ('find') and resource ('repositories that the given repository directly depends on'), and the name differentiates it from siblings like 'find_callers' and 'find_callees'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explains what the tool does but does not explicitly state when to use it versus alternatives like 'find_callees' or 'find_cascade_risk'. It mentions that an empty list is returned if the repo is not found or has no dependencies, which provides some context on outcomes, but lacks 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.
find_second_order_injectionA
Detect second-order injection patterns: taint written to DB then read back unsanitized.
A second-order (stored) injection occurs when:
1. User-controlled data reaches a persistence write (JPA save/persist/merge).
2. That same data is later read back from the DB and passed to a dangerous sink.
Orihime approximates this by finding:
- Methods that write to a JPA entity (call to save/persist/merge on a Repository
class or on an EntityManager).
- Methods that read from the same entity type (findById/findAll/executeQuery) AND
whose return value flows into a sink (detected via call chain analysis).
This is a structural approximation — it is not full data-flow. False positives are
expected; use it to prioritise manual review, not as a definitive scanner.
Args:
repo_name: Repository to analyse.
Returns:
List of dicts with keys:
``entity_fqn``, ``write_method_fqn``, ``read_method_fqn``,
``read_file_path``, ``risk_level``.
| Name | Required | Description | Default |
|---|---|---|---|
| repo_name | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden. It discloses that the tool approximates second-order injection via structural analysis (write to JPA entity, read to sink), that it's not full data-flow, and that false positives are expected. This goes well beyond a simple 'detect' statement, though it could explicitly state it's read-only (implicit for analysis).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured: a one-sentence summary first, then detailed explanation of the injection pattern and approximation, followed by limitations, args, and returns. Every sentence adds value, and the front-loading ensures key info is immediately visible. It's perfectly concise for the tool's complexity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description fully explains the detection approach, limitations (structural approximation, false positives), and output format. The output schema is described in the description, so agents understand return values. Given the tool's complexity and the presence of sibling analysis tools, this is a complete and self-contained description.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema coverage is 0% (no parameter descriptions in schema), but the description adds 'repo_name: Repository to analyse.' While minimal, this clarifies the parameter's role beyond the schema's title. The parameter is self-explanatory, and the description compensates adequately for the lack of schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool detects second-order injection patterns, describes the two-step (write then read) process, and explicitly labels it as a structural approximation. This differentiates it from sibling taint analysis tools like find_taint_flows, which handle direct flows. The verb 'Detect' and specific resource 'second-order injection patterns' provide a precise purpose.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear context: it's an approximation, not a definitive scanner, to be used for prioritizing manual review. This implies when to use (for discovery) and when not (as sole decision). It does not explicitly name alternatives, but the sibling list provides that context. The guidance on false positives is valuable.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
find_superclassesA
Walk the EXTENDS chain upward from the given class (BFS, max depth 10).
Returns:
List of dicts with keys ``class_fqn``, ``depth``, ``repo_name``.
Depth 1 = direct parent. Starting class not included.
| Name | Required | Description | Default |
|---|---|---|---|
| class_fqn | Yes | ||
| max_depth | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses the algorithm (BFS), max depth, and that the starting class is excluded from results. However, it lacks information about side effects, authorization needs, or whether the tool is read-only. Given no annotations, this is adequate but incomplete.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is very concise: two sentences plus a bullet list for the return format. It front-loads the main action and is well-structured.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers the essential details: purpose, parameters, behavior, and output. It could benefit from specifying the scope (e.g., which repositories) or whether it works cross-repo, but it is sufficient for a tool in a code analysis context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema description coverage, the description adds crucial meaning: it explains that class_fqn is the starting point and max_depth has a default of 10. It also describes the return format beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states that the tool walks the EXTENDS chain upward using BFS with max depth 10, and defines the return format. This distinguishes it from sibling tools like find_implementations which might find subclasses.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus alternatives, such as find_callees or find_implementations. The description does not mention prerequisites or when not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
find_taint_flowsA
Return confirmed taint flows where a tainted argument (position 0) flows to a known sink's first parameter.
Stricter than find_taint_sinks — only returns findings where:
1. The caller method has a @RequestParam/@RequestBody/@PathVariable parameter (taint source)
2. The CALLS edge has caller_arg_pos=0 (first argument is passed)
3. The callee method name matches a known sink
Returns:
List of dicts with keys:
``source_method_fqn``, ``sink_method_name``, ``caller_arg_pos``,
``callee_param_pos``, ``file_path``, ``line_start``, ``owasp_category``.
| Name | Required | Description | Default |
|---|---|---|---|
| repo_name | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided; description carries full burden. It discloses three filtering conditions and return fields. For a read-only query tool, this is sufficient transparency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Description is concise, well-structured with bullet points for conditions and return keys. Front-loaded with main purpose, every sentence adds value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given one simple parameter and no annotations, the description covers purpose, conditions, and return format. It is complete for the tool's complexity, though parameter explanation is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Input schema has one parameter (repo_name) with 0% schema description coverage, but the description does not mention or explain the parameter at all. A simple explanation like 'the repository name to analyze' would be expected.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description states the tool returns 'confirmed taint flows' and explicitly differentiates from sibling 'find_taint_sinks' by listing three stricter conditions. Verb+resource is specific and clear.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states when to use this tool over 'find_taint_sinks' by noting it is stricter and lists conditions. Does not include when not to use, but the comparison is clear enough.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
find_taint_pathsA
Multi-hop taint path analysis from annotation-based sources to dangerous sinks.
Performs BFS forward through CALLS edges from all taint-source methods
(those annotated with @RequestParam, @PathVariable, @RequestBody, etc.)
up to max_depth hops. Sanitizer calls prune the branch. All distinct
call chains reaching a sink are returned.
Unlike find_taint_flows (single-hop, arg_pos=0 only), this tool finds
handler → service → sink chains of arbitrary depth up to max_depth.
Args:
repo_name: Repository to analyse.
max_depth: Maximum hop depth (default 5, capped at 10).
Returns:
List of dicts with keys:
source_method_fqn, source_annotations, sink_method_fqn, sink_type,
path_length, call_chain, sanitizer_pruned, file_path, line_start.
Empty list if no repo found, no sources, or no paths exist.
| Name | Required | Description | Default |
|---|---|---|---|
| repo_name | Yes | ||
| max_depth | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries full burden. It describes BFS algorithm, source annotations, sanitizer pruning, and return conditions including empty list cases. Minor omission: does not define 'dangerous sinks' explicitly, but overall transparent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise with no wasted words. It uses a clear structure: one-sentence summary, algorithm explanation, comparison to sibling, and bullet lists for arguments and return values.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the complexity of multi-hop taint analysis, the description covers algorithm (BFS), sources, sinks, pruning, max_depth, return format, and edge cases (empty repo, no sources, no paths). The output schema is detailed in the description, making it self-contained.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema has 0% description coverage, but the description adds meaning: 'repo_name: Repository to analyse.' and 'max_depth: Maximum hop depth (default 5, capped at 10).' This compensates for the lack of schema descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it performs 'Multi-hop taint path analysis from annotation-based sources to dangerous sinks' and contrasts with sibling find_taint_flows, which is single-hop only. The verb 'find' and resource 'taint paths' are specific and distinguishable.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly explains when to use this tool over the sibling find_taint_flows by noting multi-hop vs single-hop and arbitrary depth. It also mentions max_depth constraint, providing clear usage context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
find_taint_sinksA
Find all calls to known dangerous sink methods in the given repository.
Uses the built-in sink registry (SQL, HTTP clients, exec) merged with any
custom sinks defined in ``~/.orihime/security.yml``. This is the custom
sources/sinks equivalent of SonarQube Enterprise's configurable taint rules.
Args:
repo_name: Repository to analyse.
Returns:
List of dicts with keys:
``caller_fqn``, ``sink_method``, ``file_path``, ``line_start``.
| Name | Required | Description | Default |
|---|---|---|---|
| repo_name | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full burden. It discloses that the tool uses a built-in sink registry merged with custom sinks from a YAML file, and it specifies the return format. However, it does not mention whether the tool is read-only, any performance implications, or required permissions, which are relevant for an analysis tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a well-structured docstring with clear Args and Returns sections. It is concise, though the SonarQube comparison could be seen as slightly extraneous. Overall, it front-loads the core purpose and details efficiently.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the single parameter and the presence of an output schema (not shown but indicated), the description provides sufficient context: it explains the return format and the merging logic. No significant gaps remain for basic usage.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The only parameter 'repo_name' has 0% schema description coverage, but the description adds 'Repository to analyse', which clarifies its role beyond the schema's type-only definition. This adds meaningful value.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses specific verb 'find' and resource 'calls to known dangerous sink methods', clearly distinguishing from siblings like 'find_reachable_sinks' or 'find_taint_flows'. It also specifies the context (repository) and mentions merging built-in and custom sinks, leaving no ambiguity about the tool's purpose.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for security analysis by referencing SonarQube's taint rules, but it does not explicitly state when to use this tool versus alternatives (e.g., 'find_reachable_sinks', 'find_taint_paths'). No when-not-to-use or comparative guidance is provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
generate_security_reportA
Generate a security findings report mapped to a compliance framework.
This is the Orihime equivalent of SonarQube Enterprise's OWASP / CWE /
PCI DSS / STIG security reports. It aggregates findings from the taint
analysis and maps each to the requested framework's taxonomy.
Args:
repo_name: Repository to analyse.
framework: One of ``owasp``, ``cwe``, ``pci``, ``stig`` (default: ``owasp``).
Returns:
List of dicts, each a finding with framework-specific keys.
OWASP: ``category``, ``caller_fqn``, ``sink_method``, ``file_path``, ``line_start``.
CWE: ``cwe_id``, ``caller_fqn``, ``sink_method``, ``file_path``, ``line_start``.
PCI: ``requirement``, ``caller_fqn``, ``sink_method``, ``file_path``.
STIG: ``vuln_id``, ``caller_fqn``, ``sink_method``, ``file_path``.
| Name | Required | Description | Default |
|---|---|---|---|
| repo_name | Yes | ||
| framework | No | owasp |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Despite lacking annotations, the description explains the tool aggregates taint analysis findings and maps them to a taxonomy, with no mention of side effects or destructive actions; it is adequately transparent for a read report tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with Args and Returns sections, but could be slightly more concise; however, every sentence provides necessary context.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity and lack of output schema, the description fully explains the output structure for each framework, ensuring completeness for agent selection and invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description enumerates acceptable values for 'framework' (owasp, cwe, pci, stig) and explains the purpose of 'repo_name', adding significant meaning beyond the minimal schema (which has 0% coverage).
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool generates a security findings report mapped to a compliance framework, mentioning specific frameworks (OWASP, CWE, PCI, STIG) and distinguishing it from siblings by focusing on compliance mapping rather than raw analysis.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The purpose is clearly scoped to compliance report generation, but it does not explicitly contrast with sibling tools like find_taint_flows or blast_radius, leaving the agent to infer appropriate usage.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_file_locationA
Get the source file path and line number for a method or class by FQN.
Tries Method first, then Class.
Args:
fqn: Fully-qualified name of the method or class.
Returns:
Dict with keys ``fqn``, ``file_path``, ``line_start``,
or ``None`` if not found.
| Name | Required | Description | Default |
|---|---|---|---|
| fqn | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full burden. It discloses the search order (Method then Class) and return format (dict or None). However, it omits details like scope (single repo?), index requirements, or handling of multiple matches.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise with no redundant content. Core purpose, argument semantics, and return structure are front-loaded in two clear sentences.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple lookup tool with one parameter and an output schema, the description covers input, behavior, and output adequately. Missing details like case sensitivity or namespace format are minor.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, but the description compensates by defining fqn as a fully-qualified name of a method or class, and explains the resolution logic. Adding example format would strengthen it further.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description explicitly states the tool gets the source file path and line number for a method or class by fully-qualified name. It distinguishes itself from sibling tools like find_callees or search_symbol by focusing on location retrieval.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit guidance on when to use this tool versus alternatives like find_implementations or search_symbol. The description explains internal logic (tries Method first) but lacks context for tool selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
index_repo_toolA
Index a source repository into the Orihime knowledge graph.
After indexing, all other query tools will reflect the new data.
Args:
repo_path: Absolute path to the repository root on disk.
repo_name: Logical name to identify the repo in queries
(e.g. ``point-bank-bff``).
branch: Branch name to tag this index run with (default: ``"master"``).
Index the same repo under different branch names to compare
branches side-by-side.
force: When True, re-parse every file even if blob hashes are unchanged.
Returns:
Summary dict with counts: ``repos``, ``files``, ``classes``,
``methods``, ``endpoints``, ``rest_calls``, ``call_edges``.
On failure, returns ``{"error": "<message>"}``.
| Name | Required | Description | Default |
|---|---|---|---|
| repo_path | Yes | ||
| repo_name | Yes | ||
| branch | No | master | |
| force | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must carry full burden. It discloses that indexing makes data available to queries, explains parameter behavior (branch comparison, force re-parse), and describes return values (summary or error). However, it does not mention potential side effects, permissions, or whether re-indexing overwrites data. Acceptable but not thorough.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with explicit sections (overview, effect, args, returns). It is front-loaded with purpose. While somewhat lengthy, every sentence adds value and it remains efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 4 parameters and no output schema, the description covers input semantics, return structure, and effect on other tools. It lacks mention of prerequisites (e.g., repo must exist on disk) but is otherwise complete for an indexing tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Despite 0% schema description coverage from context, the description's Args section provides detailed explanations for all 4 parameters: repo_path is absolute path, repo_name is logical name, branch allows side-by-side comparison, force re-parses. This adds significant meaning beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Index a source repository into the Orihime knowledge graph' and explains the effect on sibling tools: 'After indexing, all other query tools will reflect the new data.' This distinguishes it from all sibling tools, which are query/analysis tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage before querying, but does not explicitly state when not to use or provide alternatives. It gives clear context: using this makes data available to other tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ingest_perf_resultsA
Ingest a Gatling/JMeter/JSON perf results file into the graph.
Creates PerfSample nodes and OBSERVED_AT edges to matching Method nodes.
Args:
repo_name: The logical name of the indexed repository.
file_path: Absolute path to the perf results file
(.log = Gatling, .xml = JMeter, .json = simple JSON).
Returns:
Dict with keys ``ingested``, ``matched_methods``, ``unmatched``.
On failure, returns ``{"error": "<message>"}``.
| Name | Required | Description | Default |
|---|---|---|---|
| repo_name | Yes | ||
| file_path | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must carry the full burden. It discloses that the tool creates nodes and edges (write operation), describes the return dict format including error handling, and specifies file format expectations. This provides adequate behavioral context, though it doesn't mention any side effects like overwriting existing data.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise with a few sentences, front-loads the main purpose, and uses a clear structure with separate sections for args and returns. It is efficient but could be slightly more structured.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no output schema and no annotations, the description explains the return keys (ingested, matched_methods, unmatched, error) and the required parameters with format details. However, it does not mention prerequisites like whether the repo must already be indexed, and lacks details on potential error scenarios beyond the generic error dict.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema has 0% description coverage, so the description must add value. It explains repo_name as 'logical name of indexed repository' and file_path as absolute path with allowed file extensions (.log, .xml, .json), providing meaning beyond the parameter names.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states that the tool ingests Gatling/JMeter/JSON perf results files into the graph, creating PerfSample nodes and OBSERVED_AT edges. This is specific and distinct from sibling tools, which are primarily analysis or query tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for ingesting performance results but does not explicitly state when to use this tool versus alternatives, nor does it provide conditions or prerequisites for using it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_branchesA
List all indexed branches, optionally filtered by repository.
Args:
repo_name: If provided, only return branches belonging to this repo.
Pass an empty string (the default) to list all repos.
Returns:
List of dicts with keys ``repo_name``, ``branch_name``.
| Name | Required | Description | Default |
|---|---|---|---|
| repo_name | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It implies read-only behavior and lists return format, but does not disclose side effects, authentication needs, or performance implications. Basic transparency is present.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise: a single-line purpose and an Args/Returns section with no extraneous information. Every sentence is necessary and well-structured.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple tool with one optional parameter and an output schema, the description covers usage and return format. It mentions 'indexed branches', which hints at prerequisites, but overall it is complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema description coverage, the description adds significant meaning: it explains the filtering logic and default value for repo_name, compensating for the schema's lack of detail.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'List' and the resource 'indexed branches' with an optional filter by repository. It distinguishes from sibling tools like list_repos and list_endpoints, which are different resources.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explains when to use the filter (repo_name) and the default behavior, but does not explicitly state when not to use it or compare with other tools. The context is clear enough for a straightforward listing tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_endpointsA
List all HTTP endpoints in the graph, optionally filtered by repository.
Args:
repo_name: If provided, only return endpoints belonging to this repo.
Pass an empty string (the default) to list all repos.
Returns:
List of dicts with keys ``http_method``, ``path``,
``handler_fqn``, and ``repo_name``.
| Name | Required | Description | Default |
|---|---|---|---|
| repo_name | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full burden. It implies a read-only operation but does not discuss auth, performance, or error handling.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Description is concise with a clear docstring format (Args, Returns), no unnecessary words, and essential information is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Covers core functionality, parameter, and return format. With an output schema and single optional parameter, it is largely complete, though it could mention error cases or prerequisites.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description adds significant meaning beyond the schema: explains the effect of repo_name, including the empty string default meaning 'all repos'. Schema coverage is 0%, so this is essential.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'List all HTTP endpoints in the graph', identifying the verb and resource, and offers optional filtering by repository, distinguishing it from sibling tools like list_repos or list_branches.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides clear context for the repo_name parameter and its default behavior, but does not explicitly state when to use this tool vs alternatives or any exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_entity_relationsA
List all JPA entity relationships in a repo.
Returns list of dicts: source_class_fqn, field_name, relation_type,
fetch_type, target_class_fqn.
| Name | Required | Description | Default |
|---|---|---|---|
| repo_name | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full burden. It states the tool lists relationships and specifies return fields, implying read-only behavior, but lacks explicit safety notes or operational context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two essential sentences: one for purpose, one for return format. No fluff, front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Tool has 1 parameter and output schema described. Lacks error handling or prerequisites but is largely complete for its simplicity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description does not mention the 'repo_name' parameter or add meaning beyond the schema title. Schema coverage is 0%, making the description insufficient for parameter understanding.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'List all', the resource 'JPA entity relationships', and the context 'in a repo'. It uniquely identifies the tool's function among sibling tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool vs. alternatives, no prerequisites or limitations mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_reposA
List all indexed repositories with their stats.
Returns:
List of dicts with keys: ``name``, ``root_path``, ``method_count``,
``endpoint_count``.
Empty list if no repositories have been indexed yet.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description transparently details the return value (list of dicts with keys) and the edge case of an empty list if no repos are indexed. No annotations are provided, but the description is clear.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise: one sentence for purpose, one for return format. No unnecessary information, front-loaded with the core action.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given zero parameters and the presence of an output schema, the description covers all necessary information: action, return format, and edge case. Completely sufficient.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
No parameters exist, so baseline score of 4 is appropriate. The description does not add parameter info (none needed).
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description explicitly states 'List all indexed repositories with their stats,' providing a specific verb and resource. It distinguishes itself from sibling tools (e.g., list_branches, list_endpoints) by focusing on repositories.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit guidance on when to use this tool vs. alternatives. However, the description clarifies its scope (all repos) and return format, which implicitly suggests using it for a broad overview.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_security_configA
Return the active security configuration (sources, sinks, sanitizers).
Shows the merged built-in + user-defined rules currently in effect.
Useful for verifying that custom ``~/.orihime/security.yml`` rules were loaded.
Returns:
Dict with keys ``source_annotations``, ``source_methods``,
``sink_methods``, ``sanitizer_methods``.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so the description carries full behavioral burden. It explains the return value (a dict with specific keys) and the data source (merged built-in + user-defined rules). It does not mention error conditions or permissions, but for a read-only listing tool with no parameters, this is sufficient.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise (4 lines) and front-loaded, starting with the primary purpose in the first sentence. Every sentence contributes meaning: what it returns, what it shows, when it's useful, and the exact output format. No superfluous text.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no parameters and no output schema, the description fully covers what the tool does, what it returns, and a typical use case. It leaves no significant gaps for the agent to guess.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, and schema coverage is 100% by default. The description adds no parameter info (none needed), but it does explain the return structure, which adds value beyond the schema. Baseline for 0 params is 4.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it returns the active security configuration (sources, sinks, sanitizers) and specifies 'merged built-in + user-defined rules'. This is a specific verb+resource that distinguishes it from sibling tools which focus on finding specific security issues (e.g., find_taint_flows).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides a concrete use case ('useful for verifying that custom rules were loaded'), giving context for when to use. It does not explicitly exclude alternatives, but the sibling tool names (e.g., find_reachable_sinks) imply different purposes, making the intended usage clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_unresolved_callsA
List outgoing REST calls that could not be matched to a known endpoint.
These represent cross-repo or external HTTP calls that Orihime has not yet
resolved to an Endpoint node.
Args:
repo_name: If provided, only return unresolved calls from this repo.
Pass an empty string (the default) to list all repos.
Returns:
List of dicts with keys ``url_pattern``, ``http_method``,
``callee_name``, ``caller_fqn``, and ``repo_name``.
| Name | Required | Description | Default |
|---|---|---|---|
| repo_name | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must carry the burden. It describes the return format and the nature of the data (unresolved calls). It does not mention side effects, but listing is inherently read-only. Could be improved by explicitly stating safety.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Well-structured docstring with Args and Returns sections. Purpose is front-loaded. No extraneous information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the presence of an output schema (described in the description), the tool definition covers purpose, parameter, and return format completely. No gaps for an agent to select or invoke.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description explains the repo_name parameter with its effect and default value, adding meaning beyond the schema which only has a title. Schema description coverage is 0%, so description compensates fully.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it lists outgoing REST calls that are unresolved, using specific verb 'list' and resource 'unresolved calls'. It differentiates from siblings like list_endpoints by mentioning cross-repo or external HTTP calls.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explains the optional repo_name parameter and its default behavior. It does not explicitly mention when not to use or alternative tools, but the context is clear enough for an agent to decide.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_symbolA
Search for classes or methods by name (case-insensitive substring match).
Args:
query: Substring to search for, e.g. ``InterestCalc`` or ``calculate``.
Returns:
List of dicts with keys ``type`` (``"class"`` or ``"method"``),
``fqn``, and ``file_path``.
Results from both classes and methods are merged and returned together.
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Given no annotations, the description discloses search behavior (substring match, case-insensitive) and return format (list of dicts with type, fqn, file_path). Minor gap: no mention of permissions or limitations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences with clear docstring-style Args/Returns. Front-loaded purpose, no wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple single-parameter search tool with output schema described, the description fully explains input, behavior, and return format. No missing details.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema only provides 'query' as a string. Description adds critical semantics: substring match, case-insensitive, and example values. Highly compensates for 0% schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states it searches for classes or methods by name with case-insensitive substring match. Distinguishes from sibling analysis tools (e.g., find_callers, find_implementations) as a general search.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly describes the search behavior and provides an example. However, does not specify when to use this tool versus alternative search tools or when not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.
1 tool update
v1.0.1- Removed
find_endpoint_callers
33 tool updates
v1.0.0- First observed
blast_radius - First observed
estimate_capacity - First observed
find_callees - First observed
find_callers - First observed
find_cascade_risk - First observed
find_complexity_hints - First observed
find_cross_service_taint - First observed
find_eager_fetches - First observed
find_endpoint_callers - First observed
find_entry_points - First observed
find_external_calls - First observed
find_hotspots - First observed
find_implementations - First observed
find_io_fanout - First observed
find_license_violations - First observed
find_reachable_sinks - First observed
find_repo_dependencies - First observed
find_second_order_injection - First observed
find_superclasses - First observed
find_taint_flows - First observed
find_taint_paths - First observed
find_taint_sinks - First observed
generate_security_report - First observed
get_file_location - First observed
index_repo_tool - First observed
ingest_perf_results - First observed
list_branches - First observed
list_endpoints - First observed
list_entity_relations - First observed
list_repos - First observed
list_security_config - First observed
list_unresolved_calls - First observed
search_symbol
TDQS
Most tools have clearly distinct purposes, but there is overlap among taint analysis tools (e.g., find_taint_flows, find_taint_sinks, find_taint_paths) and performance analysis tools (e.g., find_complexity_hints, find_hotspots), which could cause misselection despite detailed descriptions.
The majority of tools follow a consistent verb_noun pattern (e.g., find_callees, list_repos), but 'blast_radius' uses a metaphor rather than a verb, and 'ingest_perf_results' uses an abbreviation, deviating slightly from the norm.
With 32 tools, the count is on the higher side but still appropriate for the broad scope covering static analysis, security, performance, and repository management. Each tool addresses a specific need, so the surface is well-scoped.
The tool set covers many essential operations (indexing, call graph queries, security analysis, performance analysis), but there are notable gaps: no tools for deleting or updating indexed data, and no visualization or export functionality, limiting end-to-end workflows.
Maintenance
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
Hosted code graph over MCP: exact callers, dependencies, and cross-repo blast radius for AI agents.
251Ground-truth code graph for your codebase: exact callers, callees, symbols & dependencies.
An MCP server that gives your AI access to the source code and docs of all public github repos
Enterprise code intelligence for M&A, security audits, and tech debt. Hosted server with 200k free.
Related MCP Servers
- AlicenseAqualityAmaintenanceFramework-aware code intelligence MCP server that builds a cross-language dependency graph from source code. 53 integrations (Laravel, Django, Rails, Spring, NestJS, Next.js, and more) across 68 languages. 100+ tools for navigation, impact analysis, refactoring, security scanning, session memory, and CI/PR reports — up to 97% token reduction.285,033102MIT
- AlicenseNot gradedqualityAmaintenanceA high-performance code knowledge graph server implementing MCP, indexing codebases into a structured AST knowledge graph with semantic search, call graph traversal, and HTTP route tracing.3,12672MIT
- AlicenseAqualityAmaintenanceHigh-performance code intelligence MCP server. Indexes codebases into a persistent knowledge graph — average repo in milliseconds. 159 languages, sub-ms queries, 99% fewer tokens. Single static binary, zero dependencies.1542,343MIT
- AlicenseBqualityDmaintenanceInstant codebase knowledge graph MCP server. It auto-detects languages, indexes functions, classes, and call chains, enabling LLMs to navigate code in milliseconds.24MIT
Appeared in Searches
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/srinivasan-sundaresan95/orihime'
If you have feedback or need assistance with the MCP directory API, please join our Discord server