F# live development environment with hot reload, interactive REPL, testing, and cohort collaboration features exposed via MCP tools
SageFs MCP server has critical gaps in definition quality. While 23 tools are registered with names and basic descriptions, most lack complete input/output schemas visible in the provided code. Tool descriptions are present but often generic (average ~80 chars, well below the 194-char baseline). Parameter descriptions are minimal or absent for many tools. No output schemas are documented. Error handling guidance is absent. The server exposes session IDs and internal state management concepts that should be abstracted. Security concerns include potential exposure of working directory paths and lack of permission-gating on destructive operations (hard_reset, delete claims, etc.). Naming follows verb_noun convention well (send_fsharp_code, check_fsharp_code, create_session, list_sessions), which is a strength. However, tool cohesion is poor, the cohort-related tools (join_cohort, acquire_claim, release_claim, reassign_claim, request_landing) introduce distributed consensus patterns that are orthogonal to F# REPL evaluation and complicate the tool surface. No evidence of pagination, result limits, or batch operations. Test-related tools (run_tests, run_test) lack description of what test framework is expected or how to structure tests.
Acquire a claim over a scope in the cohort session
Cancel the currently running evaluation
Type-check F# code without executing it
Create a new F# REPL session for a specified project
Disable hot reload/live mode for the current session
Enable hot reload/live mode for the current session
Export the current session as an .fsx script file
Get all current FSI bindings and their types
Output schemas are not documented. No visible schema definitions for tool return types. LLMs cannot anticipate field names, types, or structure of responses, forcing them to parse free-form output.
Descriptive text for tools is minimal and generic. Most descriptions are under 80 characters (far below 194-char baseline). Descriptions like 'List all active F# REPL sessions' and 'Get all current FSI bindings and their types' lack WHEN-to-use guidance, prerequisites, and return-value hints. LLMs cannot reliably distinguish similar tools (e.g., list_sessions vs get_cohort_status).
Inferred effective spec: <=2025-11-25.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | F | 47 | <=2025-11-25 | v2 |
| 2026-03-09 | F | 36 | - | v1 |
Get the current status of the cohort collaboration session
Perform a hard reset of the session, rebuilding the project
Join a cohort collaboration session with a specified role
Leave the current cohort collaboration session
List all active F# REPL sessions
Reassign a claim to another member in the cohort
Release a previously acquired claim
Request a landing (synchronization point) in the cohort session
Reset the current F# REPL session, clearing all bindings
Run a specific test by name
Run all tests in the current session
Send F# code to the REPL session for evaluation
Stop a running F# REPL session
Switch the active session for subsequent code evaluation
Switch between Interactive (REPL) and Live (hot reload) workflow modes
Parameter descriptions are often missing or minimal. 'sessionId' is documented as 'Optional session ID' but lacks guidance on format, where to obtain it, or what 'optional' means operationally (defaults to active session? required if multiple exist?). Similar issues affect 'agentName', 'working_directory', and 'claimId'.
No error handling guidance. No tool description explains what to do if the sessionId is invalid, the project file does not exist, code evaluation fails, or cohort operations conflict. LLMs will not know whether to retry, ask the user, or abort.
Destructive operations (hard_reset, release_claim, reassign_claim, run_tests, cancel_eval) expose no confirmation or dry-run step. No tool description warns that these are irreversible or have side effects. An agent could inadvertently lose work.
Tool cohesion is poor. Cohort management tools (join_cohort, acquire_claim, release_claim, reassign_claim, request_landing) introduce distributed consensus and claim management, which is orthogonal to F# REPL evaluation. These tools complicate the surface, increase context burden, and mix concerns. Consider separating into a distinct cohort server or delegating to a library.
No pagination or result limits documented. 'list_sessions' and 'get_bindings' provide no guidance on result size, pagination, or result caps. If an agent has hundreds of sessions or bindings, response size could explode and exhaust context.
Session management is exposed as a parameter and tool concern. 'sessionId' is optional and defaults to 'current', but this stateful-session model is not documented. Each request should be self-contained. Consider embedding session context in request metadata or using stateless design.
No documentation of tool dependencies. 'send_fsharp_code' requires a session to exist (via 'create_session'), but this dependency is not stated. LLMs may call tools in the wrong order without this guidance.
Test framework and test format are not documented. 'run_test' and 'run_tests' do not explain what test framework is expected (xUnit, NUnit, Expecto?), how to structure tests, or how test discovery works. Agents cannot write tests without this context.