Skip to main content
Glama
marcusbai

Caiyun Weather MCP Server

by marcusbai

get_realtime_weather

Retrieve real-time weather data by specifying coordinates, language, and unit system using the Caiyun Weather MCP Server. Ideal for accurate, location-based weather insights.

Instructions

获取实时天气数据

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
languageNo语言zh_CN
latitudeYes纬度
longitudeYes经度
unitNo单位制 (metric: 公制, imperial: 英制)metric

Implementation Reference

  • Core handler function getRealtime that makes the API call to retrieve realtime weather data from Caiyun API.
    async getRealtime(longitude: number, latitude: number): Promise<CaiyunWeatherResponse> {
      try {
        const url = `${this.baseUrl}/${this.apiKey}/${longitude},${latitude}/realtime`;
        const response = await axios.get<CaiyunWeatherResponse>(url, {
          params: {
            lang: this.language,
            unit: this.unit
          }
        });
        
        return response.data;
      } catch (error) {
        if (axios.isAxiosError(error)) {
          throw new Error(`彩云天气API错误: ${error.response?.data?.error || error.message}`);
        }
        throw error;
      }
    }
  • MCP tool dispatch handler for 'get_realtime_weather': validates input, calls service, formats and returns response.
    case 'get_realtime_weather': {
      if (!this.isValidLocationArgs(args)) {
        throw new McpError(
          ErrorCode.InvalidParams,
          '无效的位置参数'
        );
      }
      
      const { longitude, latitude } = args;
      
      const weatherData = await weatherService.getRealtime(longitude, latitude);
      
      return {
        content: [
          {
            type: 'text',
            text: JSON.stringify(weatherService.formatRealtimeData(weatherData), null, 2),
          },
        ],
      };
    }
  • Input schema definition for the 'get_realtime_weather' tool, specifying required longitude/latitude and optional language/unit.
      name: 'get_realtime_weather',
      description: '获取实时天气数据',
      inputSchema: {
        type: 'object',
        properties: {
          longitude: {
            type: 'number',
            description: '经度',
          },
          latitude: {
            type: 'number',
            description: '纬度',
          },
          language: {
            type: 'string',
            enum: ['zh_CN', 'en_US'],
            description: '语言',
            default: 'zh_CN',
          },
          unit: {
            type: 'string',
            enum: ['metric', 'imperial'],
            description: '单位制 (metric: 公制, imperial: 英制)',
            default: 'metric',
          },
        },
        required: ['longitude', 'latitude'],
      },
    },
  • src/index.ts:156-185 (registration)
    Registration of the 'get_realtime_weather' tool in the ListToolsRequestSchema handler.
    {
      name: 'get_realtime_weather',
      description: '获取实时天气数据',
      inputSchema: {
        type: 'object',
        properties: {
          longitude: {
            type: 'number',
            description: '经度',
          },
          latitude: {
            type: 'number',
            description: '纬度',
          },
          language: {
            type: 'string',
            enum: ['zh_CN', 'en_US'],
            description: '语言',
            default: 'zh_CN',
          },
          unit: {
            type: 'string',
            enum: ['metric', 'imperial'],
            description: '单位制 (metric: 公制, imperial: 英制)',
            default: 'metric',
          },
        },
        required: ['longitude', 'latitude'],
      },
    },
  • Helper function to format realtime weather data into a structured, human-readable JSON response.
    formatRealtimeData(data: CaiyunWeatherResponse) {
      const realtime = data.result.realtime;
      if (!realtime) {
        throw new Error('没有实时天气数据');
      }
    
      return {
        location: data.location,
        server_time: new Date(data.server_time * 1000).toISOString(),
        temperature: realtime.temperature,
        apparent_temperature: realtime.apparent_temperature,
        humidity: realtime.humidity,
        weather: this.getSkyconText(realtime.skycon),
        weather_code: realtime.skycon,
        wind: {
          speed: realtime.wind.speed,
          direction: realtime.wind.direction
        },
        pressure: realtime.pressure,
        visibility: realtime.visibility,
        precipitation: {
          local: {
            intensity: realtime.precipitation.local.intensity,
            type: this.getPrecipitationTypeText(realtime.precipitation.local.type)
          },
          nearest: realtime.precipitation.nearest ? {
            intensity: realtime.precipitation.nearest.intensity,
            type: this.getPrecipitationTypeText(realtime.precipitation.nearest.type),
            distance: realtime.precipitation.nearest.distance
          } : {
            intensity: 0,
            type: this.getPrecipitationTypeText('none'),
            distance: 0
          }
        },
        air_quality: {
          aqi: realtime.air_quality.aqi.chn,
          pm25: realtime.air_quality.pm25,
          pm10: realtime.air_quality.pm10,
          o3: realtime.air_quality.o3,
          so2: realtime.air_quality.so2,
          no2: realtime.air_quality.no2,
          co: realtime.air_quality.co,
          description: realtime.air_quality.description.chn,
          trend: realtime.air_quality.trend,
          primary_pollutant: realtime.air_quality.primary_pollutant
        },
        life_index: {
          comfort: realtime.life_index.comfort?.desc || '暂无数据',
          ultraviolet: realtime.life_index.ultraviolet?.desc || '暂无数据',
          sport: realtime.life_index.sport?.desc || '暂无数据',
          travel: realtime.life_index.travel?.desc || '暂无数据',
          cold: realtime.life_index.cold?.desc || '暂无数据',
          carWashing: realtime.life_index.carWashing?.desc || '暂无数据',
          dressing: realtime.life_index.dressing?.desc || '暂无数据'
        }
      };
    }
Install Server

Other Tools

Related Tools

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/marcusbai/caiyun-weather-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server