koyeliaghosh/modal-mcp-server
If you are the rightful owner of modal-mcp-server and would like to certify it and/or have it hosted online, please leave a comment on the right or send an email to henry@mcphub.com.
A cloud-hosted Model Context Protocol (MCP) server for real-time stock analysis, built with Modal and FastAPI.
š Modal MCP Stock Analysis Server
A cloud-hosted Model Context Protocol (MCP) server for real-time stock analysis, built with Modal and FastAPI.
š Overview
This MCP server provides stock analysis tools through a RESTful API, demonstrating how to implement the Model Context Protocol in a distributed, cloud-native architecture.
šļø Architecture
- Backend: Modal serverless platform
- Framework: FastAPI for HTTP endpoints
- Protocol: Model Context Protocol (MCP) implementation
- Data Source: yfinance for real-time stock market data
⨠Features
š§ MCP Tools Available:
get_stock_price
- Retrieve current stock price and basic company informationanalyze_stock_comprehensive
- Complete investment analysis with scoring algorithmsmart_ticker_search
- Convert company names to ticker symbols
š Analysis Capabilities:
- Real-time stock price lookup
- YTD return calculations
- P/E ratio analysis
- Investment scoring (0-100 scale)
- Buy/Hold/Sell recommendations
- Smart company name ā ticker conversion
š Quick Start
Prerequisites
- Python 3.11+
- Modal account (modal.com)
- Modal CLI installed
Installation & Setup
-
Clone the repository
git clone <your-repo-url> cd modal-mcp-server
-
Install Modal CLI
pip install modal
-
Authenticate with Modal
modal token new
-
Deploy the MCP server
modal deploy modal_mcp_complete.py
š” API Endpoints
Base URL
https://koyeliaghoshroy1--mcp-stock-analysis-server-web-app.modal.run
Available Endpoints:
GET / - Server Information
curl https://koyeliaghoshroy1--mcp-stock-analysis-server-web-app.modal.run/
GET /health - Health Check
curl https://koyeliaghoshroy1--mcp-stock-analysis-server-web-app.modal.run/health
GET /tools - MCP Tools Discovery
curl https://koyeliaghoshroy1--mcp-stock-analysis-server-web-app.modal.run/tools
POST /call - Execute MCP Tool
curl -X POST https://koyeliaghoshroy1--mcp-stock-analysis-server-web-app.modal.run/call \
-H "Content-Type: application/json" \
-d '{"name": "TOOL_NAME", "arguments": {"key": "value"}}'
š ļø Usage Examples
Stock Price Lookup
curl -X POST https://koyeliaghoshroy1--mcp-stock-analysis-server-web-app.modal.run/call \
-H "Content-Type: application/json" \
-d '{"name": "get_stock_price", "arguments": {"symbol": "AAPL"}}'
Response:
{
"success": true,
"tool": "get_stock_price",
"result": [{
"symbol": "TSLA",
"company_name": "Tesla, Inc.",
"current_price": 248.50,
"market_cap": 790000000000,
"sector": "Consumer Cyclical"
}],
"timestamp": "2025-06-10T..."
}
Comprehensive Analysis
curl -X POST https://koyeliaghoshroy1--mcp-stock-analysis-server-web-app.modal.run/call \
-H "Content-Type: application/json" \
-d '{"name": "analyze_stock_comprehensive", "arguments": {"symbol": "AAPL"}
}'
Response:
{
"success": true,
"tool": "analyze_stock_comprehensive",
"result": [{
"symbol": "AAPL",
"company_name": "Apple Inc.",
"current_price": 185.50,
"ytd_return": 12.5,
"pe_ratio": 28.5,
"investment_score": 75,
"recommendation": "Buy",
"sector": "Technology"
}],
"timestamp": "2025-06-10T..."
}
Smart Ticker Search
curl -X POST https://koyeliaghoshroy1--mcp-stock-analysis-server-web-app.modal.run/call \
-H "Content-Type: application/json" \
-d '{
"name": "smart_ticker_search",
"arguments": {"query": "microsoft"}
}'
š§ Configuration
Environment Variables
MCP_SERVER_SECRET
- Optional server secret for authentication
Modal Secrets
The server can optionally use Modal secrets for configuration:
stock_secrets = modal.Secret.from_name("Stock-api-config")
š Project Structure
modal-mcp-server/
āāā modal_mcp_complete.py # Main MCP server implementation
āāā README.md # This file
āāā requirements.txt # Dependencies (handled by Modal)
š§ Investment Scoring Algorithm
The comprehensive analysis uses a proprietary scoring algorithm:
score = 50 # Base score
if ytd_return > 15: score += 25
elif ytd_return > 5: score += 15
elif ytd_return > 0: score += 5
if 10 < pe_ratio < 25: score += 15
# Final score: 0-100
recommendation = "Buy" if score >= 70 else "Hold" if score >= 50 else "Sell"
šÆ Supported Stock Symbols
Direct Ticker Symbols:
- Tech: AAPL, GOOGL, MSFT, TSLA, META, NVDA, AMD, INTC
- Finance: JPM, BAC, WFC, GS
- Consumer: WMT, KO, PEP, NKE, MCD
- ETFs: SPY, QQQ
Company Name Mapping:
- apple ā AAPL
- microsoft ā MSFT
- google/alphabet ā GOOGL
- amazon ā AMZN
- tesla ā TSLA
- meta/facebook ā META
- netflix ā NFLX
- nvidia ā NVDA
š Development
Local Testing
# Test health endpoint
curl http://localhost:8000/health
# Test tools discovery
curl http://localhost:8000/tools
# Test tool execution
curl -X POST http://localhost:8000/call \
-H "Content-Type: application/json" \
-d '{"name": "get_stock_price", "arguments": {"symbol": "AAPL"}}'
Deployment
# Deploy to Modal
modal deploy modal_mcp_complete.py
# Check deployment status
modal app list
# View logs
modal logs <app-id>
š Monitoring & Debugging
Health Checks
Monitor server health via the /health
endpoint:
curl https://koyeliaghoshroy1--mcp-stock-analysis-server-web-app.modal.run/health
Error Handling
The server provides detailed error responses:
{
"error": "No data available for INVALID",
"success": false,
"timestamp": "2025-06-10T..."
}
š MCP Protocol Implementation
This server implements the Model Context Protocol specification:
- Tool Discovery:
GET /tools
returns available MCP tools - Tool Execution:
POST /call
executes tools with proper request/response format - Error Handling: Standardized error responses
- Type Safety: JSON schema validation for tool inputs
š¤ Integration Examples
Python Client
import requests
def call_mcp_tool(tool_name, arguments):
response = requests.post(
"https://your-modal-url/call",
json={"name": tool_name, "arguments": arguments}
)
return response.json()
# Get stock price
result = call_mcp_tool("get_stock_price", {"symbol": "AAPL"})
JavaScript Client
async function callMCPTool(toolName, arguments) {
const response = await fetch('https://your-modal-url/call', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({ name: toolName, arguments })
});
return response.json();
}
// Analyze stock
const analysis = await callMCPTool('analyze_stock_comprehensive', { symbol: 'TSLA' });
š License
MIT License - see LICENSE file for details.
š Acknowledgments
- Modal - For serverless cloud infrastructure
- Hugging Face - For hackathon organization
- yfinance - For stock market data
- FastAPI - For web framework
- MCP Community - For protocol specification
š Related Links
- Frontend Interface: [Gradio MCP Client] (https://huggingface.co/spaces/Agents-MCP-Hackathon/mcp-stock-analysis-hackathon)
- Modal Platform: modal.com
- MCP Specification: Model Context Protocol
Built for the Hugging Face Gradio MCP Hackathon š