return_all=True on large binaries (1800+ functions) produced 72K char responses that exceeded the MCP tool result limit. Instead of truncating, oversized responses now return a structured summary with sample data, available fields, and actionable instructions for narrowing the query. Three layers of filtering: - Server-side grep: Jython HTTP handlers filter during Ghidra iteration - Field projection: jq-style key selection strips unneeded fields - Token budget guard: responses exceeding 8k tokens return a summary New files: core/filtering.py (project_fields, apply_grep, estimate_and_guard) Modified: config, pagination, base mixin, all 5 domain mixins, headless server
68 lines
1.2 KiB
Python
68 lines
1.2 KiB
Python
"""Core infrastructure for GhydraMCP.
|
|
|
|
Contains HTTP client, pagination, progress reporting, and logging utilities.
|
|
"""
|
|
|
|
from .http_client import (
|
|
safe_get,
|
|
safe_post,
|
|
safe_put,
|
|
safe_patch,
|
|
safe_delete,
|
|
simplify_response,
|
|
get_instance_url,
|
|
)
|
|
from .pagination import (
|
|
CursorManager,
|
|
CursorState,
|
|
paginate_response,
|
|
get_cursor_manager,
|
|
estimate_tokens,
|
|
)
|
|
from .progress import (
|
|
ProgressReporter,
|
|
report_progress,
|
|
report_step,
|
|
)
|
|
from .filtering import (
|
|
project_fields,
|
|
apply_grep,
|
|
estimate_and_guard,
|
|
)
|
|
from .logging import (
|
|
log_info,
|
|
log_debug,
|
|
log_warning,
|
|
log_error,
|
|
)
|
|
|
|
__all__ = [
|
|
# HTTP client
|
|
"safe_get",
|
|
"safe_post",
|
|
"safe_put",
|
|
"safe_patch",
|
|
"safe_delete",
|
|
"simplify_response",
|
|
"get_instance_url",
|
|
# Pagination
|
|
"CursorManager",
|
|
"CursorState",
|
|
"paginate_response",
|
|
"get_cursor_manager",
|
|
"estimate_tokens",
|
|
# Progress
|
|
"ProgressReporter",
|
|
"report_progress",
|
|
"report_step",
|
|
# Filtering
|
|
"project_fields",
|
|
"apply_grep",
|
|
"estimate_and_guard",
|
|
# Logging
|
|
"log_info",
|
|
"log_debug",
|
|
"log_warning",
|
|
"log_error",
|
|
]
|