energy-mcp
energy-mcp
미국 전력 수요 및 기상 데이터를 위한 MCP 서버입니다. 이 서버는 데이터를 MCP 도구, 리소스, 프롬프트로 제공하며, stdio를 통해 로컬에서 실행되고 모든 MCP 클라이언트(Claude Desktop, Claude Code, LangChain의 MCP 어댑터, MCP Inspector)와 함께 작동합니다.
데이터는 실제 관측값이 담긴 작은 SQLite 파일로 제공되므로, 저장소를 클론하고 데이터베이스나 API 키 없이 실행할 수 있습니다.
Python 3.11+ · MCP SDK 1.x (FastMCP) · MIT
MCP란 무엇인가
MCP는 Anthropic의 개방형 프로토콜입니다. AI 클라이언트가 앱별로 사용자 정의 통합을 하는 대신 외부 도구를 호출하고 외부 데이터를 읽는 하나의 표준 방식을 제공합니다. 서버는 제공하는 기능을 공지하고, 클라이언트는 연결하여 사용합니다. 서버는 세 가지를 제공할 수 있습니다:
도구(Tools): 모델이 호출할 수 있는 함수.
리소스(Resources): 클라이언트가 컨텍스트로 로드하는 읽기 전용 콘텐츠.
프롬프트(Prompts): 사용자가 선택할 수 있는 재사용 가능한 템플릿.
이 서버는 세 가지를 모두 제공합니다.
Related MCP server: euenergy-mcp
도구, 리소스, 프롬프트
도구:
list_regions(): 사용 가능한 지역, 행 수, 날짜 범위.query_demand(region, start, end, limit=168): 지정된 날짜 범위의 시간별 수요(MWh).daily_demand(region, start, end): 일일 평균, 최고, 최소.peak_demand(region, start, end): 가장 높은 수요 시간.compare_regions(start, end, regions=None): 지역별 평균 및 최고 수요.demand_vs_weather(region, start, end): 해당 지역의 기온과 결합된 일일 수요.
리소스:
schema://energy: 테이블에 대한 간단한 설명.docs://coverage: 현재 로드된 지역과 날짜.
프롬프트:
analyze_demand(region): 지역을 도구로 안내하는 시작 프롬프트.
빠른 시작
uv가 필요합니다.
git clone https://github.com/visethchapman/energy-mcp
cd energy-mcp
uv run energy-mcp # starts the server on stdio; it waits for a clientUI에서 도구를 둘러보려면 MCP Inspector를 사용하세요:
uv run mcp dev src/energy_mcp/server.py클라이언트에 연결하기
Claude Desktop
claude_desktop_config.json에 다음을 추가하고(macOS에서는 ~/Library/Application Support/Claude/claude_desktop_config.json) Claude Desktop을 다시 시작하세요:
{
"mcpServers": {
"energy": {
"command": "uv",
"args": ["--directory", "/absolute/path/to/energy-mcp", "run", "energy-mcp"]
}
}
}Claude Code
claude mcp add energy -- uv --directory /absolute/path/to/energy-mcp run energy-mcp그런 다음 일반 언어로 질문하면 클라이언트가 도구를 선택합니다:
"2024년 7월에 평균 수요가 가장 높은 미국 전력망은?"
"ERCOT의 2024년 최고 수요는 언제였고, 그날 휴스턴은 얼마나 더웠나?"
"1월 첫째 주 동안 CISO와 PJM의 수요를 비교해줘."
예제 출력
클라이언트가 도구를 호출할 때 번들 데이터의 실제 결과:
> peak_demand(region="ERCO", start="2024-01-01", end="2024-12-31")
{ "region": "ERCO", "period": "2024-08-20 23:00:00", "demand_mwh": 85544.0 }
> compare_regions(start="2024-07-01", end="2024-07-31")
[ {"region":"PJM", "avg_mwh":109674.4, "peak_mwh":153121.0},
{"region":"ERCO", "avg_mwh": 60200.6, "peak_mwh": 81200.0},
{"region":"CISO", "avg_mwh": 32008.4, "peak_mwh": 44727.0},
{"region":"NYIS", "avg_mwh": 21494.1, "peak_mwh": 28990.0} ]
> demand_vs_weather(region="ERCO", start="2024-07-01", end="2024-07-03")
[ {"day":"2024-07-01", "avg_mwh":67736.3, "tmax_c":37.8, "tmin_c":26.7},
{"day":"2024-07-02", "avg_mwh":68463.9, "tmax_c":36.1, "tmin_c":27.2},
{"day":"2024-07-03", "avg_mwh":68017.8, "tmax_c":34.4, "tmin_c":26.7} ]demand_vs_weather가 흥미롭습니다. ERCOT 수요는 여름철 휴스턴 기온과 함께 상승하며(에어컨 부하), 도구는 두 시리즈를 반환하므로 모델이 그 연관성을 지적할 수 있습니다.
데이터
모든 데이터는 실제 데이터이며, 파일 크기를 약 5MB로 유지하기 위해 2024년으로 제한되었습니다.
테이블 | 출처 | 행 수 |
| EIA Open Data API, 4개 균형 관할 구역: ERCO, CISO, PJM, NYIS | ~35k |
| NOAA GHCN-Daily, 각 지역의 주요 부하 구역 근처에 있는 하나의 관측소 | ~1.5k |
| NOAA 관측소 메타데이터 | 4 |
| 테이블 문서 | 3 |
SQLite 파일이 커밋되어 있으므로 런타임에 아무것도 가져오지 않습니다. 파일을 다시 빌드하거나 날짜 범위를 확장하려면(무료 EIA API 키 필요):
uv run --extra build python scripts/build_sample_db.py --start 2023-01-01 --end 2024-12-31ENERGY_MCP_DB를 설정하여 서버가 다른 SQLite 파일을 가리키도록 할 수 있습니다.
안전성
읽기 전용. 데이터베이스는 SQLite
mode=ro로 열리므로 어떤 도구도 쓸 수 없습니다.매개변수화된 SQL. 인수는 매개변수로 바인딩되며 쿼리 문자열에 형식화되지 않으므로 SQL을 삽입할 수 없습니다.
입력 검증. 지역 및 날짜 인수는 데이터베이스에 도달하기 전에 확인되며, 잘못된 입력은 모델이 처리할 수 있는 명확한 오류로 반환됩니다.
실행에 필요한 비밀 정보 없음. 데이터는 저장소에 있으며, EIA 키는 데이터를 다시 빌드할 때만 필요합니다.
개발
uv run pytest
uv run mcp dev src/energy_mcp/server.py구조:
src/energy_mcp/
server.py # FastMCP server: tools, resources, prompts
db.py # read-only SQLite access
data/energy_sample.sqlite # bundled real data
scripts/build_sample_db.py # how the sample was assembled
tests/test_tools.py이 프로젝트는 MCP 1.x SDK(FastMCP API)를 사용합니다. 이는 현재 Claude Desktop 문서와 mcp CLI에서 사용하는 SDK입니다. 2.x SDK는 새로운 재설계입니다.
관련 자료
energy-text2sql은 동일한 EIA 및 NOAA 데이터를 사용하는 텍스트-투-SQL 에이전트입니다. 동일한 데이터, 다른 인터페이스: 하나는 SQL을 작성하여 질문에 답하고, 이 서버는 데이터를 MCP 도구로 제공합니다.
라이선스
MIT
Available Tools
6 toolscompare_regionsA
Compare average and peak demand across regions over the same date range. Useful for questions like "which grid was busiest last summer?".
Args:
start: Inclusive start date, 'YYYY-MM-DD'.
end: Inclusive end date, 'YYYY-MM-DD'.
regions: Optional subset of region codes. Defaults to all regions.
| Name | Required | Description | Default |
|---|---|---|---|
| end | Yes | ||
| start | Yes | ||
| regions | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description does not disclose behavioral traits such as data aggregation details, performance implications for many regions, or any side effects. Since no annotations are provided, the description carries the full burden but only provides basic usage info.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise, with a clear purpose and example, followed by parameter details. The example is helpful, though the 'Args' section could be integrated more seamlessly.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given there is an output schema and sibling tools exist, the description adequately distinguishes the tool and explains inputs. It could be more complete by mentioning that the output includes both average and peak metrics, or by noting that region codes can be obtained via list_regions.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description explains the start and end parameters with date format and inclusiveness, and clarifies the optional regions parameter defaults to all. However, schema coverage is 0%, so the description compensates partially but does not specify accepted region codes or error handling for invalid inputs.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states it compares average and peak demand across regions over a date range, with a specific example of use, clearly distinguishing it from siblings like peak_demand or daily_demand.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides an example question to indicate when to use the tool, but does not explicitly state when not to use it or mention alternative tools for single-region queries.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
daily_demandA
Return daily demand statistics (average, peak, minimum MWh) for one region over a date range. Use this instead of query_demand for ranges longer than a few days.
Args:
region: Balancing authority code.
start: Inclusive start date, 'YYYY-MM-DD'.
end: Inclusive end date, 'YYYY-MM-DD'.
| Name | Required | Description | Default |
|---|---|---|---|
| end | Yes | ||
| start | Yes | ||
| region | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so description carries full burden. It states the output includes average, peak, and minimum MWh, likely aggregated daily. However, it does not disclose whether the tool is read-only, whether it handles time zones, or what happens if data is missing for a date range. These gaps limit transparency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences plus a parameter list, all relevant. It front-loads the purpose and usage recommendation. The parameter list is typical for Google-style docstrings but adds a bit of vertical space. No wasted sentences.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 3 simple string parameters, an output schema exists (presumably documenting return fields), and no nested objects, the description is largely complete. It provides purpose, usage, and parameter formats. Missing details like valid region codes or date range limits are minor given the output schema's presumed coverage.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description must compensate. It explains region as a balancing authority code, start and end as inclusive dates with 'YYYY-MM-DD' format. This adds significant meaning beyond the bare schema property titles. However, it does not specify valid region codes or constraints on date range length.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool returns daily demand statistics (average, peak, minimum MWh) for a region over a date range. It distinguishes itself from the sibling query_demand by explicitly recommending use for ranges longer than a few days.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides explicit guidance on when to use this tool over query_demand ('for ranges longer than a few days') and lists three parameters with format hints. No exclusions or alternatives are elaborated beyond query_demand, but the recommendation is specific and actionable.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
demand_vs_weatherA
Join daily average demand against daily temperature for a region, using the NOAA weather station nearest that region's main load zone. Reveals the demand-temperature relationship (heating and cooling load).
Args:
region: Balancing authority code.
start: Inclusive start date, 'YYYY-MM-DD'.
end: Inclusive end date, 'YYYY-MM-DD'.
Returns one row per day: average demand (MWh) and that day's max/min temp (C).
| Name | Required | Description | Default |
|---|---|---|---|
| end | Yes | ||
| start | Yes | ||
| region | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description bears full responsibility for transparency. It discloses the method ('using the NOAA weather station nearest that region's main load zone'), the output structure (one row per day, average demand MWh, max/min temp C), and the join logic. It does not mention potential limitations like missing data or time zone handling, but the core behavior is well explained.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise and well-structured: a lead sentence explaining the purpose, followed by a bullet-like Args list. Every sentence adds value, and there is no redundancy. The key information is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's moderate complexity (3 required parameters, output schema exists), the description is complete. It explains the input format, the join logic, and the output structure (one row per day, demand and temperature). The presence of an output schema means the full return format is already defined, so the description's summary is sufficient.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description provides clear, actionable semantics for all three parameters. It explains region as 'Balancing authority code', start and end as 'Inclusive start date, YYYY-MM-DD' and 'Inclusive end date, YYYY-MM-DD'. This adds significant value beyond the schema, which only has titles. With 0% schema description coverage, the description fully compensates.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: joining daily average demand against daily temperature for a region to reveal the demand-temperature relationship. It uses a specific verb ('join') and resource ('demand vs weather') and distinguishes itself from sibling tools like query_demand, daily_demand, and compare_regions by focusing on the combined analysis.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explains the tool's use case (revealing heating and cooling load relationships) but does not explicitly state when to avoid it or name alternatives. However, the context (sibling tools) and the description's wording imply that this tool is for combined demand-weather analysis, which is a distinct purpose among the siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_regionsA
List the balancing authorities available, with row counts and the date range of demand data for each. Call this first to see what you can query.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries the burden. It clearly indicates a read operation (listing), no side effects mentioned but context implies safe discovery. Could be more explicit about read-only nature, but adequate for a listing tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences: first explains output, second provides usage guidance. Front-loaded, no wasted words, each sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter listing tool with an output schema, the description tells what is returned (balancing authorities, row counts, date ranges) and when to use it. Complete for the agent to understand and invoke correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
No parameters exist, and schema coverage is 100% trivially. Description does not need to add parameter info. Baseline 4 is appropriate as no value beyond schema is necessary.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states the tool lists balancing authorities with row counts and date ranges. Distinguishes from siblings by specifying the output content (row counts, date ranges) and by positioning it as a discovery tool to be called first.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly says 'Call this first to see what you can query,' providing a clear when-to-use instruction and implying it is a prerequisite for other tools like query_demand or daily_demand.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
peak_demandA
Find the single highest-demand hour for one region over a date range, returning the timestamp and the demand in MWh.
Args:
region: Balancing authority code.
start: Inclusive start date, 'YYYY-MM-DD'.
end: Inclusive end date, 'YYYY-MM-DD'.
| Name | Required | Description | Default |
|---|---|---|---|
| end | Yes | ||
| start | Yes | ||
| region | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description fully carries the burden of behavioral disclosure. It states that the tool returns a single timestamp and demand value, which is clear. However, it does not cover edge cases (e.g., no data in range, invalid region), error handling, or any mutation aspects. For a simple read-only query, this is adequate but not thorough.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise: one purpose sentence followed by a parameter list. Every sentence is necessary and there is no fluff. The key information is front-loaded in the first sentence.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the simplicity of the tool (3 string parameters, no output schema, no annotations), the description covers purpose, parameters, and return value. It is complete enough for an agent to use correctly. Missing details like error handling or behaviour when no data exists are minor gaps for such a straightforward query.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description must explain parameters. It does: region is a 'balancing authority code', start and end are 'inclusive start/end date' with format 'YYYY-MM-DD'. This adds meaningful context beyond the schema's plain string type. However, it could be improved by providing examples or a list of valid region codes.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb 'Find' and identifies the resource as 'single highest-demand hour', with clear scope of 'one region over a date range'. It also mentions the return values (timestamp and demand in MWh). This clearly distinguishes it from sibling tools like query_demand (general data) and daily_demand (per-day peaks).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus alternatives. There is no mention of when it is appropriate, when not to use it, or how it compares to sibling tools like query_demand, daily_demand, or compare_regions. The context of 'one region' is stated but not contrasted with multi-region tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
query_demandA
Return hourly electricity demand (MWh) for one region over a date range.
Args:
region: Balancing authority code (e.g. ERCO, CISO, PJM, NYIS).
start: Inclusive start date, 'YYYY-MM-DD'.
end: Inclusive end date, 'YYYY-MM-DD'.
limit: Max rows to return (default 168 = one week of hours).
Returns hourly rows ordered by time. For long ranges prefer daily_demand.
| Name | Required | Description | Default |
|---|---|---|---|
| end | Yes | ||
| limit | No | ||
| start | Yes | ||
| region | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Since no annotations exist, the description carries full burden. It discloses sorting behavior ('Returns hourly rows ordered by time'), the default limit meaning (168 = one week of hours), and the effect of using long ranges (prefer daily_demand). It does not mention pagination behavior, whether the limit is a hard cap or default, or what happens if range exceeds limit, but the essential behavioral traits are adequately covered given the tool's simplicity.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise at under 70 words, front-loaded with the core purpose and unit (MWh), then uses a structured Args list for parameters, followed by behavior and usage guidance. Every sentence serves a distinct purpose, and there is no redundancy or fluff.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has 4 parameters (3 required, 0 enums, 0% schema coverage) and an output schema, the description appropriately covers input semantics, behavior (ordered hourly rows), and usage guidance with sibling reference. With no annotations, it compensates well. The output schema presumably describes return fields, so the description's lack of explicit return format is acceptable.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It provides clear, helpful semantics for each parameter: region meaning (Balancing authority code with examples), start/end format ('YYYY-MM-DD') with 'inclusive' clarified, and limit meaning (max rows, default 168 = one week of hours). This adds substantial value beyond the schema labels (e.g., 'Region', 'Start', 'End', 'Limit').
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description explicitly states the tool returns hourly electricity demand (MWh) for one region over a date range, using a specific verb 'Return' and identifying the resource (demand data), region, and output unit (MWh). It also distinguishes itself from siblings like daily_demand and peak_demand by mentioning hourly data and the limit default of 168 rows (one week of hours), and directly points to daily_demand as an alternative for long ranges.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear when-to-use guidance: 'For long ranges prefer daily_demand', explicitly naming the sibling alternative. It also defines the purpose (hourly data for one region) implicitly telling the agent not to use this for multiple regions or aggregated summaries (compare_regions, peak_demand). The Args docstring reinforces required parameters and their formats.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
6 tool updates
v0.1.0- First observed
compare_regions - First observed
daily_demand - First observed
demand_vs_weather - First observed
list_regions - First observed
peak_demand - First observed
query_demand
TDQS
Scored across 6 tools
Each tool serves a distinct purpose: listing regions, retrieving hourly/daily/peak demand, comparing across regions, and correlating demand with weather. No functional overlap.
All six tool names follow a consistent verb_noun pattern with snake_case: list_regions, query_demand, daily_demand, peak_demand, compare_regions, demand_vs_weather. Naming is predictable and clear.
With 6 tools, the server is well-scoped for its purpose – covering region discovery, multiple demand granularities, inter-region comparison, and weather integration. No bloat or deficiency.
Core demand querying workflows are fully supported. A minor gap is the lack of a raw hourly multi-region query (compare_regions only returns averages/peaks). Overall, the surface is thorough for typical use cases.
Maintenance
Related MCP Connectors
MCP server for building and testing AI agents with multi-model experimentation and insights.
- UnifAPIOAuthcom.unifapi
Hosted MCP server for live public-data APIs and Skills for AI agents.
MCP server for querying and analyzing data from ad platforms, analytics tools, and spreadsheets
Hosted MCP server exposing US hospital procedure cost data to AI assistants
Related MCP Servers
- FlicenseNot gradedqualityDmaintenanceA production-ready Python MCP server providing tools for fetching live weather data, querying local SQLite databases, reading files, summarizing webpages, and performing safe mathematical calculations. It enables MCP-compatible LLM clients to execute these tasks autonomously as part of agentic workflows.-
- FlicenseNot gradedqualityCmaintenanceA read-only MCP server that exposes European day-ahead electricity prices for ~41 bidding zones via tools like hourly prices, cheapest hours, current price, and cross-zone summary, enabling AI agents to query energy market data.1-
- AlicenseNot gradedqualityCmaintenanceA no-API-key-required MCP server that wraps Open-Meteo APIs to provide geocoding and weather forecast data, enabling city lookups and multi-day forecasts through tools, resources, and prompts.MIT
- FlicenseAqualityDmaintenanceAn MCP server that exposes the U.S. Energy Information Administration (EIA) Open Data API, enabling LLMs to browse and query energy data across 17 datasets with generic, composable tools.4-