-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathrun_mcp.py
More file actions
79 lines (64 loc) · 2.37 KB
/
run_mcp.py
File metadata and controls
79 lines (64 loc) · 2.37 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
import warnings
# from automcp.adapters.langgraph import create_langgraph_adapter # Comment out original import
from pydantic import BaseModel
from mcp.server.fastmcp import FastMCP
# Import LangGraph instance from omni_task_agent
from omni_task_agent.agent import make_graph
# Import our custom adapter implementation
from adapters import create_langgraph_async_adapter
# Create MCP server
mcp = FastMCP("OmniTask Agent MCP Server", log_level="DEBUG")
# Suppress warnings that might interfere with STDIO transport
warnings.filterwarnings("ignore")
# Define input schema to match omni_task_agent requirements
class InputSchema(BaseModel):
prompt: str
projectRoot: str = None
file: str = None
name = "OmniTask Agent"
description = "A powerful multi-model task management system that can both integrate with various task management systems and help users choose and use the most suitable task management solution"
# Create LangGraph adapter
# Use make_graph as async context manager
# Note: This returns an async function, FastMCP supports registering async tool functions
mcp_langgraph_agent = create_langgraph_async_adapter(
agent_instance=make_graph, # Use make_graph async context manager from omni_task_agent.agent
name="OmniTask_Agent",
description=description,
input_schema=InputSchema,
)
# Register async tool to FastMCP
# FastMCP supports registering async functions as tools, no sync conversion needed
mcp.add_tool(
mcp_langgraph_agent,
name=name,
description=description
)
# Server entrypoints
def serve_sse():
mcp.run(transport="sse")
def serve_stdio():
# Redirect stderr to suppress warnings that bypass the filters
import os
import sys
class NullWriter:
def write(self, *args, **kwargs):
pass
def flush(self, *args, **kwargs):
pass
# Save the original stderr
original_stderr = sys.stderr
# Replace stderr with our null writer to prevent warnings from corrupting STDIO
sys.stderr = NullWriter()
# Set environment variable to ignore Python warnings
os.environ["PYTHONWARNINGS"] = "ignore"
try:
mcp.run(transport="stdio")
finally:
# Restore stderr for normal operation
sys.stderr = original_stderr
if __name__ == "__main__":
import sys
if len(sys.argv) > 1 and sys.argv[1] == "sse":
serve_sse()
else:
serve_stdio()