Skip to main content
Glama

Orihime

PyPI License: MIT MCP Smithery

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-b

4. 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

find_callers(method_fqn)

All methods that call the given method

find_callees(method_fqn)

All methods called by the given method

blast_radius(method_fqn, max_depth)

Transitive set of callers up to N hops

find_endpoint_callers(http_method, path_pattern)

Trace back from an HTTP endpoint to its callers

find_implementations(interface_fqn)

All classes implementing an interface

find_superclasses(class_fqn, max_depth)

Inheritance chain

find_external_calls(repo_name)

All calls to methods outside the indexed repo

Discovery

Tool

Description

search_symbol(query)

Full-text search across class/method FQNs

get_file_location(fqn)

File path and line number for any class or method

list_repos()

All indexed repositories

list_branches(repo_name)

All indexed branches for a repo

list_endpoints(repo_name)

All HTTP endpoints in a repo

list_unresolved_calls(repo_name)

REST calls that couldn't be matched to an endpoint

find_repo_dependencies(repo_name)

Cross-service DEPENDS_ON edges

ORM / JPA

Tool

Description

list_entity_relations(repo_name)

All JPA entity relationships — also used in design review (Phase 1.5)

find_eager_fetches(repo_name)

EAGER-fetched collections (N+1 risk)

Security (SAST)

Tool

Description

find_taint_sinks(repo_name)

All taint sinks reachable in the call graph

find_taint_flows(repo_name)

Value-flow taint: argument → parameter across CALLS edges

find_cross_service_taint(repo_name, max_depth)

Taint that crosses service boundaries via REST

find_second_order_injection(repo_name)

Taint stored to DB then re-read and used as sink

find_entry_points(repo_name)

All HTTP/Kafka/Scheduled/JMS/RabbitMQ entry points

find_reachable_sinks(repo_name, show_all)

Taint sinks filtered to those reachable from entry points only

generate_security_report(repo_name, framework)

Report in OWASP / CWE / PCI / STIG format

list_security_config()

Show active sources, sinks, and sanitizers from YAML config

Complexity & Performance

Tool

Description

find_complexity_hints(repo_name, min_severity)

Methods flagged with O(n²), N+1, unbounded-query, recursive

ingest_perf_results(repo_name, file_path)

Load Gatling simulation.log, JMeter XML, or JSON perf data

find_hotspots(repo_name)

Complexity hints × p99 latency, sorted by risk score

estimate_capacity(repo_name)

Little's Law capacity per endpoint; flags near-saturation

find_cascade_risk(repo_name)

Cross-service cascade: upstream endpoints limited by downstream saturation

License Compliance

Tool

Description

find_license_violations(repo_name, allowed, skip_lookup)

Flag GPL/AGPL/LGPL dependencies via Maven Central

Index

Tool

Description

index_repo_tool(repo_path, repo_name)

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-skills

Command

Description

index

Parse a repository and write its graph into KuzuDB

ui

Start the local web UI on port 7700

serve

Start the MCP server on stdio (for Claude Code, Claude Desktop, any MCP client)

serve-sse

Start the MCP server with SSE transport (for CI runners and remote clients)

resolve

Match RestCall URL patterns against Endpoints across all indexed repos

write-server

Start the write-serialization server for team/server deployments

register

Write the Orihime MCP server entry to ~/.claude/settings.json

install-skills

Copy bundled skills to the target AI assistant's config dir (--agent claude|cursor|codex|copilot|all)


Web UI

http://localhost:7700

Page

Description

/

Call graph explorer: search methods, trace callers/callees, visualize CALLS graph

/findings

Security + complexity findings table — filter by OWASP category, severity, file

/api/…

JSON endpoints backing the UI (also usable directly)


Configuration

Environment Variables

Variable

Default

Description

ORIHIME_DB_PATH

~/.orihime/orihime.db

Path to KuzuDB database directory

ORIHIME_SERVER_URL

(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

MCP Server

All MCP tools with parameters and examples

Extractors

How Java/Kotlin/JS/TS are parsed; ExtractResult schema

Security Config

Custom sources, sinks, sanitizers — YAML reference

CI Integration

GitHub Actions PR review workflow setup

Docker

Docker Compose setup for server deployments

Adding a Language

How to add a new language extractor

Cross-Repo Resolution

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-service

Developers 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

Repo

id, name, root_path

File

path, language, blob_hash, branch_name

Class

fqn, annotations, is_interface

Method

fqn, line_start, annotations, is_entry_point, complexity_hint

Endpoint

http_method, path, path_regex

RestCall

http_method, url_pattern

EntityRelation

source_class, target_class, fetch_type, relation_type

PerfSample

endpoint_fqn, p50_ms, p99_ms, rps, source

CapacityEstimate

endpoint_fqn, saturation_rps, ceiling_concurrency, risk_level

Relationship

Description

CALLS

Method → Method; carries callee_name, caller_arg_pos, callee_param_pos

CALLS_REST

Method → Endpoint (resolved cross-service call)

UNRESOLVED_CALL

Method → RestCall (not yet resolved)

CONTAINS_CLASS

File → Class

CONTAINS_METHOD

Class → Method

EXPOSES

Repo → Endpoint

DEPENDS_ON

Repo → Repo (cross-service dependency)

EXTENDS

Class → Class

IMPLEMENTS

Class → Class

HAS_RELATION

Class → EntityRelation

OBSERVED_AT

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

find_callers

<5ms

blast_radius (depth 3)

<15ms

find_taint_sinks (full repo)

<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 tools
blast_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.
ParametersJSON Schema
NameRequiredDescriptionDefault
method_fqnYes
max_depthNo
exclude_generatedNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.5/5.0
Behavior5/5

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.

Conciseness4/5

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.

Completeness5/5

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.

Parameters5/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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``.
ParametersJSON Schema
NameRequiredDescriptionDefault
repo_nameYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.5/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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.
ParametersJSON Schema
NameRequiredDescriptionDefault
method_fqnYes
exclude_generatedNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.6/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness5/5

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

Given the tool's low complexity (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.

Parameters5/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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.
ParametersJSON Schema
NameRequiredDescriptionDefault
method_fqnYes
exclude_generatedNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.1/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters5/5

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.

Purpose5/5

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.

Usage Guidelines2/5

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"``).
ParametersJSON Schema
NameRequiredDescriptionDefault
repo_nameYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.3/5.0
Behavior4/5

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.

Conciseness4/5

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.

Completeness5/5

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.

Parameters5/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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).
ParametersJSON Schema
NameRequiredDescriptionDefault
repo_nameYes
min_severityNomedium

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.4/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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
        }
ParametersJSON Schema
NameRequiredDescriptionDefault
repo_nameYes
max_depthNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.2/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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'.
ParametersJSON Schema
NameRequiredDescriptionDefault
repo_nameYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.7/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters2/5

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.

Purpose5/5

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

The description clearly states the tool's purpose: 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.

Usage Guidelines3/5

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.
ParametersJSON Schema
NameRequiredDescriptionDefault
http_methodYes
path_patternYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.8/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness4/5

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

Given the tool's simplicity (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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines2/5

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``.
ParametersJSON Schema
NameRequiredDescriptionDefault
repo_nameYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.2/5.0
Behavior2/5

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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters2/5

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.

Purpose5/5

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.

Usage Guidelines2/5

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.
ParametersJSON Schema
NameRequiredDescriptionDefault
repo_nameYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.8/5.0
Behavior5/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters5/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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.
ParametersJSON Schema
NameRequiredDescriptionDefault
repo_nameYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.2/5.0
Behavior4/5

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.

Conciseness4/5

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.

Completeness5/5

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.

Parameters4/5

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.

Purpose5/5

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

The description clearly states the tool's purpose: '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.

Usage Guidelines3/5

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``.
ParametersJSON Schema
NameRequiredDescriptionDefault
interface_fqnYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.1/5.0
Behavior3/5

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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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.
ParametersJSON Schema
NameRequiredDescriptionDefault
repo_nameYes
min_totalNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.9/5.0
Behavior3/5

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.

Conciseness4/5

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.

Completeness4/5

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

Given the tool's complexity and 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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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).
ParametersJSON Schema
NameRequiredDescriptionDefault
repo_nameYes
allowedNo
license_overridesNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.4/5.0
Behavior4/5

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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters5/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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``.
ParametersJSON Schema
NameRequiredDescriptionDefault
repo_nameYes
show_allNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.5/5.0
Behavior4/5

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.

Conciseness4/5

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.

Completeness5/5

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.

Parameters5/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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.
ParametersJSON Schema
NameRequiredDescriptionDefault
repo_nameYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.3/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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``.
ParametersJSON Schema
NameRequiredDescriptionDefault
repo_nameYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.5/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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.
ParametersJSON Schema
NameRequiredDescriptionDefault
class_fqnYes
max_depthNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.8/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines2/5

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``.
ParametersJSON Schema
NameRequiredDescriptionDefault
repo_nameYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.1/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters2/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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.
ParametersJSON Schema
NameRequiredDescriptionDefault
repo_nameYes
max_depthNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.7/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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``.
ParametersJSON Schema
NameRequiredDescriptionDefault
repo_nameYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.9/5.0
Behavior3/5

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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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``.
ParametersJSON Schema
NameRequiredDescriptionDefault
repo_nameYes
frameworkNoowasp

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.5/5.0
Behavior4/5

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.

Conciseness4/5

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.

Completeness5/5

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

Given the tool's complexity and 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.

Parameters5/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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.
ParametersJSON Schema
NameRequiredDescriptionDefault
fqnYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.8/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines2/5

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>"}``.
ParametersJSON Schema
NameRequiredDescriptionDefault
repo_pathYes
repo_nameYes
branchNomaster
forceNo

TDQS

A4.1/5.0
Behavior3/5

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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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>"}``.
ParametersJSON Schema
NameRequiredDescriptionDefault
repo_nameYes
file_pathYes

TDQS

A4.1/5.0
Behavior4/5

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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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``.
ParametersJSON Schema
NameRequiredDescriptionDefault
repo_nameNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.2/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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``.
ParametersJSON Schema
NameRequiredDescriptionDefault
repo_nameNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.3/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters5/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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.
ParametersJSON Schema
NameRequiredDescriptionDefault
repo_nameYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.5/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters2/5

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.

Purpose5/5

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.

Usage Guidelines2/5

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.
ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.3/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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``.
ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.5/5.0
Behavior4/5

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

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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``.
ParametersJSON Schema
NameRequiredDescriptionDefault
repo_nameNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.6/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters5/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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.
ParametersJSON Schema
NameRequiredDescriptionDefault
queryYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.6/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters5/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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. 1 tool updatev1.0.1
    • Removedfind_endpoint_callers
  2. 33 tool updatesv1.0.0
    • First observedblast_radius
    • First observedestimate_capacity
    • First observedfind_callees
    • First observedfind_callers
    • First observedfind_cascade_risk
    • First observedfind_complexity_hints
    • First observedfind_cross_service_taint
    • First observedfind_eager_fetches
    • First observedfind_endpoint_callers
    • First observedfind_entry_points
    • First observedfind_external_calls
    • First observedfind_hotspots
    • First observedfind_implementations
    • First observedfind_io_fanout
    • First observedfind_license_violations
    • First observedfind_reachable_sinks
    • First observedfind_repo_dependencies
    • First observedfind_second_order_injection
    • First observedfind_superclasses
    • First observedfind_taint_flows
    • First observedfind_taint_paths
    • First observedfind_taint_sinks
    • First observedgenerate_security_report
    • First observedget_file_location
    • First observedindex_repo_tool
    • First observedingest_perf_results
    • First observedlist_branches
    • First observedlist_endpoints
    • First observedlist_entity_relations
    • First observedlist_repos
    • First observedlist_security_config
    • First observedlist_unresolved_calls
    • First observedsearch_symbol

TDQS

A3.8/5.0
Disambiguation4/5

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.

Naming Consistency4/5

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.

Tool Count4/5

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.

Completeness3/5

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

ActivityInactive
ResponsivenessNo issues

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

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

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    A
    maintenance
    Framework-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.
    28
    5,033
    102
    MIT
  • A
    license
    Not graded
    quality
    A
    maintenance
    A 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,126
    72
    MIT
  • A
    license
    A
    quality
    A
    maintenance
    High-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.
    15
    42,343
    MIT

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/srinivasan-sundaresan95/orihime'

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