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:
Ryan Malloy 2025-09-17 00:29:27 -06:00
parent e54031ce6d
commit 5a3f65c7f3
2 changed files with 181 additions and 0 deletions

92
src/backend/src/mcpmc.py Normal file
View 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
View 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()