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