Static source inference · medium confidence · detected: Logging
Deprecated protocol patterns detected
Summary
The server provides 16 tools with generally well-structured schemas and clear descriptions. Most tools follow verb_noun naming conventions (list_*, get_*, create_*, update_*, delete_*) and have documented input parameters with type definitions. However, several issues prevent a higher score: (1) Parameter descriptions lack detail about format constraints and valid ranges, e.g., source_id and destination_id are described as 'ID' without guidance on UUID format validation or error recovery; (2) Output schemas are not documented, tools return string responses but there is no specification of what the string contains (e.g., JSON, plain text, structured format); (3) Error handling is absent, no guidance on what happens when invalid IDs are passed, API failures occur, or rate limits are hit; (4) The generic 'type_specific_config' parameter in create_destination_connector and update_destination_connector is poorly specified, the nested structure is documented in the docstring but not reflected in the JSON Schema, making it opaque to LLMs; (5) Missing idempotent/destructive hints in tool annotations despite risk levels being explicitly categorized (READ_ONLY, WRITE, DESTRUCTIVE). The server uses HTTP transport (via fastmcp) and provides reasonable baseline descriptions (average ~100-150 chars for summaries), but lacks the optimization depth and error guidance expected of production tools.
Output schemas not documented. Tools return string responses with no specification of content format, structure, or fields. LLMs cannot plan downstream calls or validate what they receive.
type_specific_config parameter is defined as generic object{} with no JSON Schema constraints. The valid structure is documented only in the docstring (in prose), making it opaque to tool-calling LLMs. LLMs cannot validate the config before calling the tool, leading to runtime errors.
Document output schemas for all tools. Specify return type (e.g., 'Returns a JSON object with fields: {source_id: string, source_type: string, name: string, ...}' or 'Returns an array of source objects, each with: {id: string, type: string, ...}'). Include example outputs in a separate specification.
Replace generic type_specific_config with type-discriminated unions. For each destination_type enum value, define a separate object schema with required and optional fields. Use oneOf in JSON Schema to enforce mutual exclusivity. E.g., 'If destination_type is astradb, type_specific_config must include {collection_name: string, keyspace: string, batch_size?: integer}'.
Add validation constraints to ID parameters. Update source_id, destination_id, workflow_id descriptions to: 'A valid UUID string (e.g., 550e8400-e29b-41d4-a716-446655440000). If not found, call list_sources() or list_destinations() to discover valid IDs.'
Implement structured error responses. When a resource is not found, return: 'ERROR: Source with ID <id> not found. Available sources: [list of 5-10 recent sources]. Call list_sources() to find the correct ID.' For validation errors: 'ERROR: Invalid batch_size <value>. Must be a positive integer (1-10000).'
Add dry-run or confirmation support for destructive operations. Update delete_destination_connector and delete_source_connector to accept a 'confirm' boolean parameter (required, default false). Document: 'To prevent accidental deletion, set confirm=true only after verifying the ID. Omit the call without confirmation for safety.'
Spec posture evidence
Inferred effective spec: <=2025-11-25.
Relies on Logging (deprecated) - log to stderr or use OpenTelemetry
Score history
Overall score trend
↑ 12 points across a rubric change (v1 → v2)
64/100
Scored
Grade
Overall
Spec posture
Rubric
2026-09-22
C
64
<=2025-11-25
v2
2026-03-09
D
52
-
v1
Get detailed information about a specific destination connector.
get_source_inforead onlyauthsource verified73/100
Get detailed information about a specific source connector.
ID parameters (source_id, destination_id, workflow_id) lack validation guidance. Descriptions say 'ID of...' but do not specify format (UUID, alphanumeric, length), what happens on invalid input, or how to find valid IDs. When an ID is not found, there is no error recovery guidance.
No error handling or recovery guidance. Tools do not document what to do if an API call fails, a resource is not found, or rate limits are exceeded. Errors return raw strings with no actionable guidance for LLM recovery.
Destructive operations (delete_destination_connector, delete_source_connector) lack confirmation/dry-run support. No pre-flight validation or undo guidance. An LLM error could permanently delete a connector without recovery path.
Tool annotations (readOnlyHint, destructiveHint, idempotentHint) are not present in tool definitions, despite risk levels being known (READ_ONLY, WRITE, DESTRUCTIVE). These hints help agents understand safe vs. unsafe operations. Missing annotations make it harder for agents to reason about side effects.
Pagination not documented for list_* tools. No mention of how many results are returned, whether pagination is supported, or how to fetch additional results. Large result sets could exhaust context windows.
Parameter descriptions for optional fields lack clarity on what happens when they are omitted. E.g., source_type in list_sources is optional, does omitting it return all sources? Is there a default filter?
list_sourceslist_destinationslist_workflows
Annotate tools with metadata. In fastmcp, use the @server.tool decorator's 'hints' parameter (if supported) or add _meta.readOnlyHint, _meta.destructiveHint, _meta.idempotentHint in responses. For READ_ONLY tools (list_*, get_*), set readOnlyHint=true. For DESTRUCTIVE tools (delete_*), set destructiveHint=true.
Document pagination for list_* tools. Add parameters: 'limit' (default 20, max 100) and 'offset' (default 0). Update descriptions: 'Returns up to {limit} results starting at offset. Total count is included in the response. Use offset to paginate through large result sets.'
Clarify behavior of optional parameters. For list_sources(source_type=null), state: 'If source_type is omitted or null, returns all sources. To filter by a specific type, provide source_type as a valid enum value (e.g., azure, s3, gdrive).'
Add batch operation variants where appropriate. E.g., create_connectors(list of configs) to avoid N sequential calls. Document: 'To create multiple connectors efficiently, pass an array instead of calling create_destination_connector repeatedly.'
Implement timeout guidance. Document expected response time for each operation and what to do on timeout. E.g., 'This operation typically completes in 2-5 seconds. If it takes longer than 30 seconds, check the Unstructured API status and retry.'
Return chaining-friendly IDs. When creating a resource, return not just the new connector's ID but also related IDs (e.g., source_id after creating a connector). This enables agents to immediately call update or delete without a follow-up lookup.