Fix FastMCP stdio method for Claude Code integration
- Replace deprecated app.run_stdio() with app.run(transport="stdio") - Update both src/mcpmc/mcpmc.py and src/backend/src/mcpmc.py - Resolves AttributeError: 'FastMCP' object has no attribute 'run_stdio' - Compatible with FastMCP 2.12.2+ API changes - MCPMC Expert System now ready for uvx mcpmc execution
This commit is contained in:
parent
e54031ce6d
commit
5a3f65c7f3
92
src/backend/src/mcpmc.py
Normal file
92
src/backend/src/mcpmc.py
Normal file
@ -0,0 +1,92 @@
|
|||||||
|
#!/usr/bin/env python3
|
||||||
|
"""
|
||||||
|
MCPMC Expert System - MCP Stdio Server Entry Point
|
||||||
|
|
||||||
|
This module provides the stdio server interface for Claude Code integration.
|
||||||
|
Run with: uvx mcpmc or python -m src.mcpmc
|
||||||
|
"""
|
||||||
|
|
||||||
|
import asyncio
|
||||||
|
import logging
|
||||||
|
import sys
|
||||||
|
import os
|
||||||
|
from typing import Dict, Any
|
||||||
|
|
||||||
|
# Add the project root to Python path for imports
|
||||||
|
sys.path.append(os.path.dirname(os.path.dirname(__file__)))
|
||||||
|
|
||||||
|
from fastmcp import FastMCP
|
||||||
|
from tools.expert_consultation import ExpertConsultationTools
|
||||||
|
from knowledge.search_engine import KnowledgeSearchEngine
|
||||||
|
from tools.elicitation import UserElicitationSystem
|
||||||
|
|
||||||
|
# Configure logging for stdio mode
|
||||||
|
logging.basicConfig(
|
||||||
|
level=logging.WARNING, # Reduce noise for stdio mode
|
||||||
|
format='%(levelname)s: %(message)s',
|
||||||
|
stream=sys.stderr
|
||||||
|
)
|
||||||
|
logger = logging.getLogger(__name__)
|
||||||
|
|
||||||
|
|
||||||
|
def create_mcp_server() -> FastMCP:
|
||||||
|
"""Create and configure the MCPMC MCP server"""
|
||||||
|
|
||||||
|
try:
|
||||||
|
# Show package version in startup banner
|
||||||
|
from importlib.metadata import version
|
||||||
|
package_version = version("mcpmc")
|
||||||
|
except:
|
||||||
|
package_version = "0.1.0"
|
||||||
|
|
||||||
|
# Print startup banner to stderr
|
||||||
|
print(f"🎬 MCPMC Expert System v{package_version}", file=sys.stderr)
|
||||||
|
print("📋 Initializing 6 expert agents and knowledge base...", file=sys.stderr)
|
||||||
|
|
||||||
|
# Create MCP application
|
||||||
|
app = FastMCP(
|
||||||
|
name="MCPMC Expert System",
|
||||||
|
version=package_version
|
||||||
|
)
|
||||||
|
|
||||||
|
try:
|
||||||
|
# Initialize expert consultation tools
|
||||||
|
expert_tools = ExpertConsultationTools(app)
|
||||||
|
|
||||||
|
# Initialize knowledge search engine
|
||||||
|
knowledge_engine = KnowledgeSearchEngine(app)
|
||||||
|
|
||||||
|
# Initialize user elicitation system
|
||||||
|
elicitation_system = UserElicitationSystem(app)
|
||||||
|
|
||||||
|
print(f"✅ Expert system ready: {len(expert_tools.registry.get_all_agents())} agents, "
|
||||||
|
f"{knowledge_engine.knowledge_base.get_statistics()['total_entries']} knowledge entries",
|
||||||
|
file=sys.stderr)
|
||||||
|
|
||||||
|
return app
|
||||||
|
|
||||||
|
except Exception as e:
|
||||||
|
logger.error(f"Failed to initialize MCPMC expert system: {e}")
|
||||||
|
sys.exit(1)
|
||||||
|
|
||||||
|
|
||||||
|
def main():
|
||||||
|
"""Main entry point for the MCP stdio server"""
|
||||||
|
|
||||||
|
try:
|
||||||
|
# Create the MCP server
|
||||||
|
app = create_mcp_server()
|
||||||
|
|
||||||
|
# Run in stdio mode for Claude Code integration
|
||||||
|
app.run(transport="stdio")
|
||||||
|
|
||||||
|
except KeyboardInterrupt:
|
||||||
|
print("\n🛑 MCPMC Expert System shutdown", file=sys.stderr)
|
||||||
|
sys.exit(0)
|
||||||
|
except Exception as e:
|
||||||
|
logger.error(f"MCP server error: {e}")
|
||||||
|
sys.exit(1)
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
main()
|
89
src/mcpmc/mcpmc.py
Normal file
89
src/mcpmc/mcpmc.py
Normal file
@ -0,0 +1,89 @@
|
|||||||
|
#!/usr/bin/env python3
|
||||||
|
"""
|
||||||
|
MCPMC Expert System - MCP Stdio Server Entry Point
|
||||||
|
|
||||||
|
This module provides the stdio server interface for Claude Code integration.
|
||||||
|
Run with: uvx mcpmc or python -m src.mcpmc
|
||||||
|
"""
|
||||||
|
|
||||||
|
import asyncio
|
||||||
|
import logging
|
||||||
|
import sys
|
||||||
|
import os
|
||||||
|
from typing import Dict, Any
|
||||||
|
|
||||||
|
from fastmcp import FastMCP
|
||||||
|
from mcpmc.tools.expert_consultation import ExpertConsultationTools
|
||||||
|
from mcpmc.knowledge.search_engine import KnowledgeSearchEngine
|
||||||
|
from mcpmc.tools.elicitation import UserElicitationSystem
|
||||||
|
|
||||||
|
# Configure logging for stdio mode
|
||||||
|
logging.basicConfig(
|
||||||
|
level=logging.WARNING, # Reduce noise for stdio mode
|
||||||
|
format='%(levelname)s: %(message)s',
|
||||||
|
stream=sys.stderr
|
||||||
|
)
|
||||||
|
logger = logging.getLogger(__name__)
|
||||||
|
|
||||||
|
|
||||||
|
def create_mcp_server() -> FastMCP:
|
||||||
|
"""Create and configure the MCPMC MCP server"""
|
||||||
|
|
||||||
|
try:
|
||||||
|
# Show package version in startup banner
|
||||||
|
from importlib.metadata import version
|
||||||
|
package_version = version("mcpmc")
|
||||||
|
except:
|
||||||
|
package_version = "0.1.0"
|
||||||
|
|
||||||
|
# Print startup banner to stderr
|
||||||
|
print(f"🎬 MCPMC Expert System v{package_version}", file=sys.stderr)
|
||||||
|
print("📋 Initializing 6 expert agents and knowledge base...", file=sys.stderr)
|
||||||
|
|
||||||
|
# Create MCP application
|
||||||
|
app = FastMCP(
|
||||||
|
name="MCPMC Expert System",
|
||||||
|
version=package_version
|
||||||
|
)
|
||||||
|
|
||||||
|
try:
|
||||||
|
# Initialize expert consultation tools
|
||||||
|
expert_tools = ExpertConsultationTools(app)
|
||||||
|
|
||||||
|
# Initialize knowledge search engine
|
||||||
|
knowledge_engine = KnowledgeSearchEngine(app)
|
||||||
|
|
||||||
|
# Initialize user elicitation system
|
||||||
|
elicitation_system = UserElicitationSystem(app)
|
||||||
|
|
||||||
|
print(f"✅ Expert system ready: {len(expert_tools.registry.get_all_agents())} agents, "
|
||||||
|
f"{knowledge_engine.knowledge_base.get_statistics()['total_entries']} knowledge entries",
|
||||||
|
file=sys.stderr)
|
||||||
|
|
||||||
|
return app
|
||||||
|
|
||||||
|
except Exception as e:
|
||||||
|
logger.error(f"Failed to initialize MCPMC expert system: {e}")
|
||||||
|
sys.exit(1)
|
||||||
|
|
||||||
|
|
||||||
|
def main():
|
||||||
|
"""Main entry point for the MCP stdio server"""
|
||||||
|
|
||||||
|
try:
|
||||||
|
# Create the MCP server
|
||||||
|
app = create_mcp_server()
|
||||||
|
|
||||||
|
# Run in stdio mode for Claude Code integration
|
||||||
|
app.run(transport="stdio")
|
||||||
|
|
||||||
|
except KeyboardInterrupt:
|
||||||
|
print("\n🛑 MCPMC Expert System shutdown", file=sys.stderr)
|
||||||
|
sys.exit(0)
|
||||||
|
except Exception as e:
|
||||||
|
logger.error(f"MCP server error: {e}")
|
||||||
|
sys.exit(1)
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
main()
|
Loading…
x
Reference in New Issue
Block a user