MCP server for analyzing Flutter/Dart upgrade impact. Scans projects, checks available upgrades, analyzes breaking changes, generates migration plans, fetches changelogs, and searches API usage.
Augur demonstrates moderate definition quality with well-structured tool names and detailed parameter schemas, but suffers from incomplete output schema documentation and missing error handling guidance. All 6 tools follow the verb_noun naming convention (scan_project, check_available_upgrades, analyze_upgrade_impact, generate_migration_plan, fetch_changelog, search_api_usage), which is excellent for LLM intent inference. Parameter schemas are comprehensive with proper types and descriptions (e.g., projectPath with 'Absolute path' constraint, analysisDepth with enum values). However, the server lacks documented return schemas, tools serialize results via jsonEncode() but provide no schema definition for what fields the LLM should expect in responses. Error handling is basic: the callback wraps tool execution in try-catch but returns only 'tool_name failed: $e' with no recovery guidance (pattern:recovery-guide). No tool documents breaking changes, rate limits, or idempotency guarantees. The scope is domain-focused (Flutter/Dart upgrade analysis) and coherent, but several tools exhibit borderline composition issues (analyze_upgrade_impact + generate_migration_plan overlap in concern, both recommending code changes).
Analyze the impact of upgrading a specific package to a target version. Identifies breaking changes, affected code locations, and cascading dependency effects.
Check available upgrades for project dependencies. Can target a specific package or all packages. Optionally filters by Flutter SDK compatibility.
Fetch and parse the changelog for a package between two versions, extracting breaking changes, new features, and bug fixes.
Generate an ordered migration plan for upgrading one or more packages. Produces step-by-step instructions including pubspec changes, code modifications, and commands to run.
Scan a Flutter/Dart project to discover all dependencies, their current versions, version constraints, and SDK requirements. Parses pubspec.yaml and pubspec.lock.
Search a project codebase for usages of a specific API (function, class, method) from a given package. Returns file locations and code context.
No output schemas documented. All 6 tools serialize results via jsonEncode() but provide no type definitions or field descriptions for what the LLM should expect. LLMs cannot plan downstream tool calls or extract chaining IDs without knowing the response structure.
Error handling is minimal and non-actionable. All 6 tools catch exceptions and return '_errorResult()' with a simple 'tool_name failed: $e' message. No recovery guidance, error classification, or suggestion for next steps (e.g., 'Try with a valid projectPath' or 'Search for the package using pub.dev API').
Inferred effective spec: <=2025-11-25.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | C | 68 | <=2025-11-25 | v2 |
analyze_upgrade_impact and generate_migration_plan overlap in responsibility. Both analyze breaking changes and suggest code modifications. This violates single-responsibility principle (pattern:tool) and forces LLMs to choose between them or call both redundantly.
Missing idempotency guarantees. No tool states whether repeated calls with the same inputs produce identical results. Agents may retry on timeouts, risking duplicate side effects (though these are read-only tools, so impact is low).
Parameter 'targetFlutterVersion' in check_available_upgrades has no format constraint. Description says 'e.g. 3.24.0' but LLMs may pass invalid formats (3.24, v3.24.0, 3.24.0-dev). Should specify semantic version pattern or enum of known versions.
fetch_changelog has no constraint on version format. 'fromVersion' and 'toVersion' are bare strings with no pattern or semantic version enforcement. LLMs may pass invalid formats causing silent failures.
search_api_usage parameter 'api' uses examples in description ('MyClass.myMethod' or 'functionName') but no formal syntax definition. Should be a regex pattern or documented grammar (e.g., '[package.]ClassName[.methodName]').