Aswini-Kumar's picture
upload: server/mcp_tools.py
f7abfad verified
"""
server/mcp_tools.py
OpenEnv MCP tool registry.
OpenEnv discovers tools by scanning for functions decorated with @tool
(or listed in openenv.yaml). This module registers all 6 environment
tools and wires them to the CrossSessionContinuityEnv instance.
Usage (from server/env.py or the MCP server entry point):
from server.mcp_tools import build_tool_registry
tools = build_tool_registry(env_instance)
"""
from __future__ import annotations
from typing import Any, Dict
def build_tool_registry(env) -> Dict[str, Any]:
"""
Return a dict mapping tool_name -> callable, each wrapping env.step().
Each callable matches the MCP tool signature:
tool_fn(**kwargs) -> dict
"""
def read_file(path: str) -> dict:
"""Read a file from the current session's workspace."""
from server.env import Action
return env.step(Action(tool="read_file", path=path))
def write_file(path: str, content: str) -> dict:
"""Write content to a file in the current session's workspace."""
from server.env import Action
return env.step(Action(tool="write_file", path=path, content=content))
def run_tests() -> dict:
"""Run the visible test suite against current file state."""
from server.env import Action
return env.step(Action(tool="run_tests"))
def write_handoff(content: str) -> dict:
"""
End Session 1 by writing a structured handoff note.
Required sections: TASK / COMPLETED / REMAINING /
KEY FUNCTIONS / EDGE CASES / NEXT STEPS
Max 400 tokens. Max 5 lines of code in code blocks.
"""
from server.env import Action
return env.step(Action(tool="write_handoff", content=content))
def parse_handoff() -> dict:
"""Retrieve the handoff note at the start of Session 2."""
from server.env import Action
return env.step(Action(tool="parse_handoff"))
def submit() -> dict:
"""Submit the solution. Runs visible + hidden tests. Returns reward."""
from server.env import Action
return env.step(Action(tool="submit"))
return {
"read_file": read_file,
"write_file": write_file,
"run_tests": run_tests,
"write_handoff": write_handoff,
"parse_handoff": parse_handoff,
"submit": submit,
}
# ---------------------------------------------------------------------------
# OpenEnv MCP server entry (called by openenv runtime)
# ---------------------------------------------------------------------------
def make_mcp_env(difficulty: str = "medium"):
"""
Factory called by the OpenEnv runtime to create a fresh env instance
with its tool registry. Returns (env, tools_dict).
"""
from server.env import CrossSessionContinuityEnv
env = CrossSessionContinuityEnv(difficulty=difficulty)
tools = build_tool_registry(env)
return env, tools