Planned future integration that will provide GitHub Copilot with access to weather data services when MCP support is added to Copilot
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@MCP Weather Serverwhat's the weather in Tokyo right now?"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
MCP Data Server ๏ฟฝ
A comprehensive Model Context Protocol (MCP) server that provides various data services, starting with real-time weather data and designed for easy extension to other data sources.
๐ Features
Modular Architecture: Easy to extend with new data services
Real-time Weather Data: Get current weather conditions for any city
MCP Protocol Compliance: Fully compatible with the Model Context Protocol
TypeScript Support: Written in TypeScript for better type safety
Stdio Transport: Uses standard input/output for communication
Extensible Design: Ready for news, finance, sports, and other data services
Related MCP server: Weather MCP Server
๐ Prerequisites
Node.js (v18 or higher)
npm or yarn package manager
TypeScript support
๐ ๏ธ Installation
Clone the repository:
git clone https://github.com/ParthibanRajasekaran/mcp-weather.git
cd mcp-weatherInstall dependencies:
npm installBuild the project (optional):
npm run build๐ฏ Usage
Running the Server
Development Mode
npm run devProduction Mode
npm run build
npm startMCP Configuration
Add the following configuration to your MCP client's configuration file (.vscode/mcp.json):
{
"servers": {
"mcp-data-server": {
"type": "stdio",
"command": "npx",
"args": [
"-y",
"tsx",
"src/main.ts"
]
}
}
}๐ง Available Services
Weather Service
getWeather
Get current weather data for a specified city.
Parameters:
city(string): The name of the city to get weather for
Example Usage:
// MCP client call
const weather = await mcpClient.callTool("getWeather", { city: "London" });Response Format:
{
"latitude": 51.51147,
"longitude": -0.13078308,
"current": {
"time": "2025-07-08T06:15",
"temperature_2m": 13.9,
"apparent_temperature": 11,
"is_day": 1,
"rain": 0
},
"hourly": {
"time": [...],
"temperature_2m": [...]
}
}๐ฎ Future Services (Planned)
News Service: Get latest news from various sources
Finance Service: Stock prices, market data, cryptocurrency
Sports Service: Live scores, team statistics, schedules
Social Media Service: Trending topics, social metrics
Maps Service: Location data, directions, places
๐๏ธ Architecture
Project Structure
mcp-weather/
โโโ src/
โ โโโ main.ts # Main server entry point
โ โโโ services/ # Data service implementations
โ โ โโโ weather.ts # Weather service
โ โโโ types/ # TypeScript type definitions
โ โ โโโ weather.ts # Weather-related types
โ โ โโโ service.ts # Base service interfaces
โ โโโ utils/ # Utility functions
โ โโโ registry.ts # Service registry
โโโ .vscode/
โ โโโ mcp.json # MCP client configuration
โโโ package.json # Project dependencies and scripts
โโโ tsconfig.json # TypeScript configuration
โโโ README.md # This fileTransport Layer
The server uses StdioServerTransport for communication:
Input: Standard input (stdin)
Output: Standard output (stdout)
Protocol: JSON-RPC over stdio
Benefits: Simple, reliable, and widely supported
Service Architecture
Each service follows this pattern:
// 1. Define types
interface ServiceInput { /* ... */ }
interface ServiceOutput { /* ... */ }
// 2. Create service class
class MyService {
async getData(input: ServiceInput): Promise<string> {
// Implementation
}
}
// 3. Register with MCP server
server.tool("myTool", "Description", schema, handler);๐ค AI Assistant Integration
Claude Desktop (Available Now)
Your MCP server works with Claude Desktop out of the box! See docs/AI_INTEGRATION.md for setup instructions.
GitHub Copilot (Coming Soon)
GitHub Copilot doesn't support MCP yet, but your server is ready! See docs/GITHUB_COPILOT_INTEGRATION.md for:
Current workarounds using VS Code extensions
What to expect when MCP support is added
Example integration patterns
VS Code Extension Example
Check out examples/vscode-extension/ for a working example that integrates your MCP server with VS Code today!
๐ MCP Inspector Integration
For debugging and development, you can use the MCP Inspector:
Install the MCP Inspector:
npm install -g @modelcontextprotocol/inspectorRun the inspector:
npx @modelcontextprotocol/inspector npx tsx src/main.tsOpen the inspector in your browser at
http://localhost:5173
๐งช Development
Adding New Services
Create Type Definitions (
src/types/myservice.ts):
export interface MyServiceInput {
query: string;
}
export const MyServiceSchema = z.object({
query: z.string().describe("Your query parameter")
});Implement Service (
src/services/myservice.ts):
export class MyService {
async getData(input: MyServiceInput): Promise<string> {
// Your implementation
return "Service response";
}
}Register Tool (in
src/main.ts):
server.tool(
"myTool",
"Description of my tool",
MyServiceSchema,
async ({ query }: { query: string }) => {
const result = await myService.getData({ query });
return {
content: [{ type: "text", text: result }]
};
}
);Development Scripts
npm run dev- Run in development mode with hot reloadnpm run build- Build the TypeScript projectnpm start- Run the built projectnpm test- Run all testsnpm run test:watch- Run tests in watch modenpm run test:coverage- Run tests with coverage report
๐ API Details
Weather Service API
Geocoding:
https://geocoding-api.open-meteo.com/v1/searchWeather:
https://api.open-meteo.com/v1/forecastRate Limit: Free tier, no authentication required
Model: UKMO Seamless (UK Met Office)
๐ค Contributing
We welcome contributions for new data services! Here's how:
Fork the repository
Create a feature branch:
git checkout -b feature/new-serviceAdd your service following the architecture above
Add tests and documentation
Commit your changes:
git commit -m 'Add new service'Push to the branch:
git push origin feature/new-serviceOpen a Pull Request
Service Guidelines
Each service should be self-contained in its own file
Use TypeScript for type safety
Include proper error handling
Add JSDoc comments for public methods
Follow the existing code style
๐ License
This project is licensed under the ISC License - see the LICENSE file for details.
๐ Acknowledgments
Model Context Protocol for the protocol specification
Open-Meteo for the free weather API
TypeScript for type safety
๐ Support
If you encounter any issues or have questions:
Check the Issues page
Create a new issue with detailed information
Contact: rajasekaran.parthiban7@gmail.com
๐ Changelog
v1.0.0
Initial release with weather service
Modular architecture for easy extension
MCP protocol compliance
TypeScript implementation
Stdio transport support
Made with โค๏ธ by ParthibanRajasekaran | Ready for extension to any data service! const server = new McpServer({ name: "MCP Weather Server", version: "1.0.0", description: "A server that provides weather data" });
## ๐ง Tools Available
### `getWeather`
Retrieves current weather conditions and forecasts for a specified city.
**Parameters:**
- `city` (string): The name of the city to get weather data for
**Returns:**
- Current temperature, apparent temperature, and conditions
- Hourly temperature forecast for the next 7 days
- Location coordinates and timezone information
**Example Usage:**
```typescript
// Through MCP client
const weatherData = await mcpClient.callTool("getWeather", { city: "London" });๐ Project Structure
mcp-weather/
โโโ .vscode/
โ โโโ mcp.json # MCP server configuration
โโโ weather/
โ โโโ main.ts # Main server implementation
โโโ package.json # Dependencies and scripts
โโโ tsconfig.json # TypeScript configuration
โโโ README.md # This file๐ MCP Inspector Integration
To use with the MCP Inspector for debugging and development:
Configure MCP Client: Add the server to your MCP configuration file (
.vscode/mcp.json):
{
"servers": {
"my-weather-server": {
"type": "stdio",
"command": "npx",
"args": ["-y", "tsx", "weather/main.ts"]
}
}
}Launch Inspector: The server can be inspected using MCP-compatible tools and inspectors.
Debug Mode: Use the development server for real-time debugging:
npm run dev๐ API Integration
The server integrates with two Open-Meteo APIs:
Geocoding API
Endpoint:
https://geocoding-api.open-meteo.com/v1/searchPurpose: Convert city names to coordinates
Features: Multi-language support, fuzzy matching
Weather API
Endpoint:
https://api.open-meteo.com/v1/forecastPurpose: Retrieve weather data using coordinates
Model: UK Met Office Seamless model (
ukmo_seamless)Data: Current conditions + hourly forecasts
๐ ๏ธ Development
Available Scripts
# Development server with hot reload
npm run dev
# Build TypeScript to JavaScript
npm run build
# Start production server
npm start
# Run tests
npm testAdding New Features
New Tools: Add tools to the server using the
server.tool()methodEnhanced Data: Extend the weather API calls to include more parameters
Error Handling: Improve error handling for edge cases
๐ Usage Examples
Basic Weather Query
// Get weather for London
const result = await getWeather({ city: "London" });
// Current conditions
console.log(`Temperature: ${result.current.temperature_2m}ยฐC`);
console.log(`Feels like: ${result.current.apparent_temperature}ยฐC`);
console.log(`Rain: ${result.current.rain}mm`);Multi-City Comparison
const cities = ["London", "Paris", "New York", "Tokyo"];
const weatherData = await Promise.all(
cities.map(city => getWeather({ city }))
);๐ Error Handling
The server includes comprehensive error handling:
Invalid Cities: Returns helpful error messages for non-existent cities
API Failures: Graceful handling of network issues
Data Validation: Input validation using Zod schemas
๐ Data Schema
Current Weather Response
interface WeatherResponse {
latitude: number;
longitude: number;
timezone: string;
current: {
time: string;
temperature_2m: number;
apparent_temperature: number;
is_day: number;
rain: number;
};
hourly: {
time: string[];
temperature_2m: number[];
};
}๐ค Contributing
Fork the repository
Create a feature branch (
git checkout -b feature/amazing-feature)Commit your changes (
git commit -m 'Add amazing feature')Push to the branch (
git push origin feature/amazing-feature)Open a Pull Request
๐ License
This project is licensed under the ISC License - see the LICENSE file for details.
๐ Acknowledgments
Open-Meteo for providing free weather data
Model Context Protocol for the MCP specification
UK Met Office for the weather model data
๐ Support
For questions or issues:
Create an issue on GitHub
Check the MCP Documentation
Built with โค๏ธ using the Model Context Protocol