Skip to main content
Glama
gopisrikrishna

solarnetwork

solarnetwork-mcp

An MCP 서버로, SolarNetwork 태양광 원격 측정(telemetry)을 AI 에이전트가 호출할 수 있는 도구로 바꿔 줍니다.

자격 증명이 필요 없습니다. SolarNetwork의 공개 엔드포인트에서 실행되며, 약 ~52곳의 실시간 태양광 사이트가 실제 발전량, 일사량, 날씨 데이터를 게시합니다. 그중 여러 곳은 1분 단위로 갱신되며 6년치 이력이 있습니다.

할 수 있는 일

태양광 원격 측정 읽기

  • 자격 증명 없이 공개 노드 탐색, 시간대 또는 활성 상태로 필터링

  • 사이트의 모든 스트림 분류: 사이트 미터, 인버터, 일사량, 날씨, ML 이상치

  • 5분부터 1년까지 모든 롤업 단위로 시계열 조회

  • 평균 전력이 아닌 미터 판독값에서 실제 누적 에너지 획득

  • 값이 아닌 타임스탬프 기준으로 스트림이 여전히 살아 있는지 확인

날짜와 함께 장비 결함 찾기

  • 인버터 정전 감지 및 정확한 시작일과 종료일 특정

  • 죽은 장치와 발전 중이지만 전력을 보고하지 않는 장치 구별

  • 형제 장치들이 계속 보고하는 동안 한 장치가 조용해졌는지 포착

  • 미터 카운터 리셋 플래그 — 이는 이를 포함한 모든 에너지 합계를 조용히 손상시킴

  • 존재한 적 없는 하드웨어에 대한 레지스트리 항목 발견

  • 결함당 손실 에너지 추정, 각 장치의 자체 용량에 따라 형제 출력에서 스케일링

오경보를 울리지 않기

  • 감지는 동료 상대적이므로 구름 덮임이 결함으로 기록되지 않음

  • 일사량계가 있는 곳에서는 일사량을 물리적 날씨 대조군으로 사용

  • 창이 열릴 때 이미 진행 중인 결함은 시작일을 지어내지 않고 하한으로 표시

  • 평가할 수 없는 사이트는 "건강함"이 아니라 평가되지 않음으로 보고

사람이 행동할 수 있는 보고서 작성

  • 우선순위가 매겨진 작업 지시서 — 평이한 언어의 원인, 증거, 번호 매겨진 단계, 도구, 승인 기준

  • 체크박스와 메모 시트가 포함된 인쇄 가능한 PDF 현장 팩

  • 티켓에 붙여넣기 위한 Markdown, 또는 후처리용 JSON

  • 전체가 일반 ASCII이므로 PDF나 티케팅 시스템에서 검은 사각형이 되지 않음

Related MCP server: EnergyAtIt MCP Server

할 수 없는 일

의존하기 전에 알아 두어야 할 사항:

  • 인버터가 두 대 미만인 사이트는 평가할 수 없습니다. 동료 비교에는 동료가 필요합니다. 도구는 깨끗한 결과를 보고하는 대신 그렇게 말합니다.

  • 명판 정격이 없습니다. 공개 노드는 이를 노출하지 않으므로 손실 수치는 동료 스케일링 추정치이지 보증 계산이 아닙니다.

  • 결함 감지는 일 단위 버킷으로 실행됩니다. 6시간 동안 조용한 장치는 보이지 않습니다.

  • 스트림 분류는 경로 규칙에 의존합니다. 스트림 이름이 Main 또는 SMAInverter1인 사이트는 분류되지 않은 채로 남습니다.

실제로 하는 일

이것이 없으면 *"이 사이트에 뭔가 잘못되었나?"*에 답하려면 노드 ID, /datum/list 엔드포인트, aggregation=Day가 존재한다는 사실, watts와 wattHours가 서로 다른 질문이라는 사실을 알아야 하고, 그런 다음 JSON을 읽어야 합니다.

이것이 있으면 이렇게 물어보세요:

"노드 1000에 뭔가 잘못되었나요? 출력이 줄었다면 날씨 때문인지 장비 때문인지 알려주세요."

그러면 에이전트가 사이트의 스트림을 발견하고, 날짜 범위를 선택하고, 집계를 실행하고, 각 인버터를 형제 인버터와 비교한 다음, 영어로 답합니다. 한 문장을 넣으면 진단이 나옵니다.

서버는 언어 모델이 서투른 부분 — 요청 서명, 페이지네이션, 단위 의미론, 9개 스트림 중 어느 것이 날씨 센서인지 아는 것 — 을 처리합니다. 에이전트는 잘하는 부분 — 무엇을 물을지 결정하고 답을 해석하는 것 — 을 처리합니다.

60초 안에 작동 모습 보기

npm install && npm run build && npm run smoke

이것은 실제 MCP 프로토콜을 통해 모든 도구를 실시간 데이터에 대해 구동합니다. 에이전트도, API 키도, 설정도 없습니다. 노드 1000에 대한 결과를 출력한다면 준비된 것입니다.

에이전트에 넘기기

아래 블록 전체를 Claude Code, Cursor 또는 MCP를 지원하는 모든 에이전트에 복사하세요. 서버를 설치하고, 스스로 연결하고, 설치가 작동함을 증명한 다음, 실시간 공개 태양광 사이트에 대해 모든 기능의 안내 데모를 실행합니다.

Set up and demo the solarnetwork MCP server for me.

1. INSTALL
   git clone https://github.com/gopisrikrishna/solarnetwork-mcp.git
   cd solarnetwork-mcp
   npm install
   npm run build

2. VERIFY THE INSTALL
   Run: npm run verify
   This runs 28 assertions against live public solar data. No credentials needed.
   Tell me how many passed. If any fail, show me which and stop.

3. CONNECT IT
   Register the server with yourself over stdio:
     command: node
     args:    ./dist/index.js   (run from the solarnetwork-mcp directory)
   The repo ships a .mcp.json that already does this. Restart/reconnect if your
   client needs it, then confirm you can see 10 tools and list their names.

4. DEMO IT
   Work through these against real public nodes and show me what you find.
   Explain your reasoning at each step, do not just dump JSON.

   a) DISCOVERY
      Which public nodes are live in US timezones? Then: what does node 1000
      measure, and how far back does its data go?

   b) ENERGY
      How much did node 1000 generate in July 2026? Use the right tool for a
      billing-shaped question and tell me why you chose it.

   c) FAULT DETECTION  <- the interesting one
      Run an asset review on node 1000 for 2026-01-01 to 2026-09-01.
      Tell me what broke, exactly when it started and ended, and what it cost.
      There is a real 79-day inverter outage in there, and a second fault where
      a device reports 0 watts while still generating. Explain the difference
      between those two failure modes and why it matters.

   d) NOT BEING FOOLED
      Run an asset review on node 949 for July 2026. It will find nothing.
      Explain why "no faults found" does NOT mean the site is healthy here.

   e) DATA INTEGRITY
      Run an asset review on node 781 for 2026-01-01 to 2026-09-01.
      Its site meter counter reset mid-year. Show me how the tool handles it and
      what would have gone wrong without that handling.

   f) CROSS-CHECK
      Node 392 publishes the platform's own ML anomaly streams. Compare what
      get_anomalies says against what the asset review found. Do they agree?

   g) REPORT
      Generate a PDF service report for node 1000 over the same window, written
      for an on-site technician. Save it and tell me the path, how many pages,
      and summarise the priority 1 jobs.

5. WRAP UP
   Tell me in plain language: what is wrong with node 1000, how much energy has
   been lost, and what you would send a technician to do first.

직접 검증하기

공개 데이터로 실행되므로 어떤 결론도 신뢰로 받아들일 필요가 없습니다. 모든 결과는 여러분의 머신에서 독립적으로 재현할 수 있습니다:

npm install && npm run build && npm run verify

실시간 공개 노드의 고정된 과거 창에 대한 28개의 검증. 자격 증명 없음. 그중:

검사

노드

기대값

결함 타임라인

1000

인버터 1 정전, 정확히 2026-05-17 ~ 2026-08-03, 79일

원격 측정 결함

1000

인버터 4가 2026-03-25부터 발전 중인데 0W 보고

페이지네이션

1000

1년은 SolarQuery의 1000행 페이지 상한을 초과함; 모든 행을 가져옴

미터 무결성

781

카운터 리셋 발생, 사이트 에너지가 음수로 보고된 적 없음

미터 무결성

900

카운터 리셋이 2026-06-03으로 특정됨

범위 정직성

949

인버터가 없는 노드는 "평가되지 않음"을 보고하고 "건강함"이라고 절대 하지 않음

사이트 미터 선택

464

실제 미터가 남은 /TEST/GEN/1 스텁보다 우선함

보고서 출력

1000

작업 지시서, 승인 기준, 일반 ASCII만

실패는 서버가 회귀했거나 SolarNetwork가 이력을 재기술했음을 의미합니다. 각 검증은 기대값과 실제 결과를 함께 출력하므로 둘을 쉽게 구분할 수 있습니다.

에이전트에 로드하기

모든 클라이언트는 동일한 세 가지 사실을 원합니다: node 실행, dist/index.js 전달, stdio로 통신. 파일 위치만 다릅니다.

여러분 머신에 있는 dist/index.js의 절대 경로를 사용하세요. Windows에서도 슬래시가 작동합니다.

여기에 커밋된 .mcp.json은 대신 상대 경로를 사용하므로, 저장소를 클론하는 사람은 아무것도 편집하지 않고도 작동하는 서버를 얻습니다. 이는 프로젝트 루트에서 서버를 시작하는 클라이언트에서만 작동하며, Claude Code가 그렇게 합니다. 다른 클라이언트는 절대 경로 형식이 필요할 수 있습니다.

Claude Code

이미 구성되어 있습니다 — .mcp.json이 저장소 루트에 있으므로 이 디렉터리에서 시작한 세션은 자동으로 이를 선택합니다. 경로만 편집하면 됩니다:

{
  "mcpServers": {
    "solarnetwork": {
      "command": "node",
      "args": ["/absolute/path/to/solarnetwork-mcp/dist/index.js"]
    }
  }
}

또는 어디에서나 전역으로 등록:

claude mcp add solarnetwork -- node /absolute/path/to/solarnetwork-mcp/dist/index.js

Claude Desktop

claude_desktop_config.json 편집:

  • macOS — ~/Library/Application Support/Claude/claude_desktop_config.json

  • Windows — %APPDATA%\Claude\claude_desktop_config.json

{
  "mcpServers": {
    "solarnetwork": {
      "command": "node",
      "args": ["/absolute/path/to/solarnetwork-mcp/dist/index.js"]
    }
  }
}

앱을 다시 시작하세요. 메시지 상자에 도구 아이콘이 나타납니다.

Cursor

프로젝트의 .cursor/mcp.json, 또는 모든 프로젝트에 적용할 ~/.cursor/mcp.json. 위와 동일한 mcpServers 블록.

Windsurf

~/.codeium/windsurf/mcp_config.json. 동일한 mcpServers 블록.

VS Code(Copilot 에이전트 모드)

.vscode/mcp.json — 키가 mcpServers가 아니라 servers입니다:

{
  "servers": {
    "solarnetwork": {
      "type": "stdio",
      "command": "node",
      "args": ["/absolute/path/to/solarnetwork-mcp/dist/index.js"]
    }
  }
}

Zed

settings.json의 context_servers 아래:

{
  "context_servers": {
    "solarnetwork": {
      "command": { "path": "node", "args": ["/absolute/path/to/dist/index.js"] }
    }
  }
}

기타

모든 MCP 클라이언트가 stdio로 실행할 수 있습니다:

node /absolute/path/to/solarnetwork-mcp/dist/index.js

코드에서 구동하려면 scripts/smoke.mjs가 공식 TypeScript SDK를 사용하는 완전한 작업 예제입니다.

로드 확인

에이전트에게 *"어떤 태양광 도구가 있나요?"*라고 물어보세요. 10개가 보여야 합니다. 그렇지 않다면 일반적인 원인은 상대 경로, 누락된 npm run build, 또는 클라이언트를 다시 시작하지 않은 것입니다.

도구

발견

도구

답변

list_public_nodes

"어떤 노드를 볼 수 있나요?"

list_sources

"이 노드는 무엇을 측정하나요?"

get_latest

"지금 무슨 일이 일어나고 있나요?"

데이터

도구

답변

query_datum

"이 기간의 출력을 보여주세요"

get_energy

"실제로 몇 kWh를 발전했나요?"

분석

도구

답변

asset_review

"무엇이 고장 났고, 언제 시작됐고, 비용은 얼마였나요?"

diagnose_site

"지금 뭔가 잘못된 것이 있나요, 날씨인가 장비인가?"

compare_fleet

"내 사이트 중 어느 것을 먼저 봐야 하나요?"

get_anomalies

"플랫폼 자체 ML 탐지기는 뭐라고 하나요?"

보고

도구

답변

create_service_report

"기술자에게 넘길 작업 지시서를 주세요"

물어볼 것들

여기서 시작하세요 — 실제 실시간 노드들입니다:

방향 확인

공개 SolarNetwork 노드 중 미국 시간대에서 활성 상태인 것은 무엇인가요?

노드 1000은 무엇을 측정하며, 데이터는 얼마나 오래 전까지 거슬러 올라가나요?

지금

노드 892가 지금 얼마나 발전하고 있으며, 그곳 날씨는 어떤가요?

노드 892에는 날씨 센서와 일사량계가 있어서 에이전트는 출력과 함께 온도, 구름 덮임, 일사량을 얻습니다.

진단 — 흥미로운 것들

노드 1000에 뭔가 잘못되었나요?

노드 892에는 인버터 6개가 나열되어 있는데 발전량이 보이지 않습니다. 무슨 일인가요?

함대

지난주 출력 기준으로 노드 880, 884, 953, 964, 976, 987, 1000을 순위 매겨 보세요. 어느 것을 먼저 봐야 하나요?

다단계, 연결 과정이 드러나는 질문

미국 시간대에서 인버터가 4개 이상이고 일사량 데이터가 있는 활성 노드를 찾아서, 지난 2주간 진단해 보세요.

돌려받는 결과

노드 1000에 대한 diagnose_site의 실제 출력:

[high] reporting-gap   /0145/S1/G1/GEN/101, /102, /103
       Registered on this node but returned no data for the window. That is a
       reporting or comms outage rather than a performance problem, so the
       device may well be generating.

[low]  inconsistent-instrumentation   /0145/S1/G1/INV/4
       Reports 0 W, but its `wh` field is non-zero (peak 16508), so it is moving
       energy. This device populates energy fields only, unlike its peers, so
       power-based comparison would wrongly read it as dead.

두 번째 결과가 이 프로젝트 전체의 요점입니다. INV/4는 0W를 읽는 반면 세 형제는 400–700W를 생산하는데, 이는 정확히 죽은 인버터처럼 보입니다 — 그리고 이 도구의 이전 버전은 그렇게 말했습니다. 실제로는 죽지 않았습니다: 그 미터는 그 달에 826 kWh를 누적했습니다. 한 사이트의 인버터들은 서로 다른 보고 규칙을 사용합니다. watts만을 기준으로 한 상태 점검은 매일 밤 작동 중인 인버터에 대해 호출을 울렸을 것입니다.

자체 노드

두 환경 변수를 설정하면 서버는 공개 /pub 엔드포인트에서 인증된 /sec 엔드포인트로 전환합니다. 도구 표면은 변경되지 않습니다:

SN_TOKEN_ID=... SN_TOKEN_SECRET=... node dist/index.js

인증은 SolarNetwork의 SNWS2 방식입니다 — 정규화된 요청에 날짜 범위 키로 HMAC-SHA256을 적용합니다. 구현되어 있지만 테스트되지 않았습니다; 검증할 토큰 쌍이 없습니다.

작동 방식

세 개의 파일, 총 ~900줄:

도구 설명이 실제 인터페이스입니다. 에이전트는 설명이 각각을 언제 사용해야 하는지 말해줄 때만 list_sources → query_datum 사슬을 올바르게 만듭니다. 그 표현을 올바르게 만드는 것이 데이터 처리보다 이 작업의 성공에 더 중요했습니다.

제한 사항

  • 공개 노드에는 노드 메타데이터가 비어 있으므로 명판 용량이 없고 따라서 용량 정규화 비교도 없습니다. compare_fleet는 원시 출력을 순위 매기며 그렇게 말합니다 — 큰 사이트가 작고 건강한 사이트보다 위에 오를 수 있습니다.

  • list_public_nodes는 실시간 목록이 아니라 특정 시점 스캔(data/nodes.json)을 읽습니다. 노드에 의존하기 전에 list_sources를 호출하여 확인하세요.

  • 캐싱이 없습니다. 반복되는 에이전트 호출이 API를 다시 때립니다.

  • 단위 테스트가 없습니다. scripts/smoke.mjs는 테스트 스위트가 아니라 실시간 프로브입니다.

  • SolarQuery는 약 ~7일을 초과하는 범위에 대해 미세한 집계를 조용히 시간별로 강제 변환합니다. query_datum은 요청한 집계를 그대로 전달하므로 긴 범위는 요청한 것보다 거친 데이터를 반환합니다.

자세한 내용: USAGE.md의 작업 예제와 작업량 비교, DATA.md의 공개 vs 자격 증명 필요 항목 전체 목록.

라이선스

독점 / 모든 권리 보유. 자세한 내용은 LICENSE를 참조하세요.

Available Tools

10 tools
asset_reviewReview a site as an asset managerA

Walk a site's day-by-day record and return every fault as a dated event: what broke, when it started, when it ended, how long it ran and how much energy it cost. Use this for 'what is wrong with this site', 'when did it start', 'how much has this cost us' and anything feeding a work order. Prefer this over diagnose_site for any window longer than a few days: diagnose_site reduces each source to one window mean, so a fault that started or ended part way through is invisible to it. Detection is peer-relative, so bad weather never raises an event.

NameRequiredDescriptionDefault
nodeIdYesSolarNetwork node ID
endDateYesExclusive end, YYYY-MM-DD
startDateYesInclusive start, YYYY-MM-DD

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the behavioral disclosure burden, and it does so well: it reveals that detection is peer-relative, that bad weather never raises an event, and that each fault is returned as a dated event with duration and energy cost. It does not cover pagination, limits, or permission requirements, but the core behavioral model is clearly disclosed.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is dense but efficient: it front-loads the core behavior, then gives use cases, then the competing-tool routing, then a key detection caveat. Every sentence earns its place and none are redundant.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a read-style tool with no output schema and no annotations, the description explains the return value sufficiently by listing what each fault event contains. It also handles the main ambiguity around long windows and weather-related false positives. Minor gaps remain around output format details and explicit read-only labeling, but the description is largely complete for correct invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% for all three parameters, and the schema already explains nodeId, startDate, and endDate semantics. The description adds context about the 'day-by-day record' and the window-length preference, but does not add substantial parameter-level meaning beyond the schema, so a baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific action and output: 'Walk a site's day-by-day record and return every fault as a dated event' with clear event fields. It also explicitly distinguishes itself from diagnose_site by explaining what diagnose_site cannot see, so an agent can tell them apart.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides explicit use cases: 'what is wrong with this site', 'when did it start', 'how much has this cost us', and work-order feeds. It also gives a direct routing rule: 'Prefer this over diagnose_site for any window longer than a few days' with a concrete reason.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

compare_fleetCompare sites across the fleetA

Compare several nodes over the same date range and rank them by output, in a single query. Use for portfolio-level questions: which sites are underperforming, how does this site compare to the rest, which node should I look at first.

NameRequiredDescriptionDefault
endDateYesExclusive end, YYYY-MM-DD
nodeIdsYesNode IDs to compare, at least two
startDateYesInclusive start, YYYY-MM-DD
aggregationNoRoll-up periodDay

TDQS

A3.9/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations supplied, the description carries the full behavioral burden. It does disclose that the tool ranks nodes by output, but it doesn't explicitly state the operation is read-only or describe any side effects, rate limits, or edge-case behaviors (e.g., what happens when nodes have missing data). The core ranking behavior is clear, but additional transparency would be valuable.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences, front-loaded with the primary action and scope, followed by concrete use cases. Every sentence contributes purpose and context without redundancy. It is appropriately concise.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

There is no output schema, so the description should explain what the tool returns. It mentions 'rank them by output' but doesn't specify the format (e.g., a table, list, metric) or how the aggregation parameter affects the ranking. It also doesn't mention limits on the number of nodes or date-range constraints beyond the schema. For a comparison tool, more detail on the output shape is needed.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so all parameters have description in the schema. The tool description adds the context of a shared date range and ranking by output, but it doesn't add syntax, format, or interaction details beyond the schema. This matches the baseline for full schema coverage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb ('Compare', 'rank') and resource ('several nodes'), with a clear scope (same date range, single query). It distinguishes itself from likely siblings like query_datum or get_energy by emphasizing cross-node comparison and ranking, so an agent can immediately tell what this tool does.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description offers concrete use cases ('which sites are underperforming, how does this site compare to the rest, which node should I look at first') that clarify when to use it. However, it doesn't explicitly state when NOT to use it or name alternative tools for single-node queries, so it's clear on the 'when' but not on the 'when-not'.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

create_service_reportCreate a field service reportA

Turn a site's faults into a service request that a person can act on: prioritised jobs, each with what happened in plain language, the evidence behind it, numbered steps for site, the tools needed and explicit sign-off criteria. Runs asset_review internally, so call this directly rather than reviewing first. Use format 'pdf' for a printable field pack, 'markdown' to paste into a ticket, or 'json' to post-process.

NameRequiredDescriptionDefault
formatNoOutput formatpdf
nodeIdYesSolarNetwork node ID
endDateYesExclusive end, YYYY-MM-DD
raisedOnNoDate on the report, YYYY-MM-DD. Defaults to the window end.
referenceNoYour own service request number. One is generated if omitted.
startDateYesInclusive start, YYYY-MM-DD
outputPathNoWhere to write the PDF. Required when format is 'pdf'.

TDQS

A4.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden. It discloses that the tool runs asset_review internally and that a reference is auto-generated if omitted, which are valuable behaviors. However, it does not clarify whether the tool is a pure read/compute or writes persistent data, despite an outputPath parameter that implies file writing. It also omits any error or side-effect details. This partial transparency earns a 3.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The three-sentence description is compact and front-loaded. The first sentence states the core purpose and output content; the second covers the internal-call routing; the third explains format semantics. Every sentence earns its place with no fluff or redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no annotations and no output schema, the description must be self-sufficient. It covers the report’s structure, the internal call, and format interpretations. It does not describe error scenarios or return values, but given the tool is a generator that writes files, the basics are covered. The presence of an outputPath parameter and its schema description already conveys the write behavior, so the description is adequately complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3. The description adds value by explaining the meaning of each format beyond the enum: 'pdf' for a printable field pack, 'markdown' to paste into a ticket, and 'json' to post-process. This directly helps the agent pick the right format. No other parameters are elaborated in the description, but their schema descriptions are sufficient.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a clear, specific purpose: 'Turn a site's faults into a service request that a person can act on' and enumerates the report's constituents (prioritised jobs, plain-language account, evidence, steps, tools, sign-off criteria). It also names a sibling (asset_review) and explicitly tells the agent to call this tool instead, making the differentiation explicit.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives direct usage guidance: 'Runs asset_review internally, so call this directly rather than reviewing first' tells the agent when to prefer this over the sibling. It also explains the three format options with their intended use cases (pdf for printable pack, markdown for ticketing, json for post-processing). It does not spell out exclusions for other siblings, but the context is clear enough.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

diagnose_siteDiagnose site faultsA

Diagnose a solar site over a date range by comparing each inverter against its own siblings, with irradiance as the weather control. Distinguishes a dead inverter (reporting but producing zero) from a reporting gap (producing but not reporting) from ordinary bad weather (everything down, irradiance also down). This is the right tool for 'is anything wrong at this site', 'which inverter is broken', or 'why did output drop'.

NameRequiredDescriptionDefault
nodeIdYesSolarNetwork node ID
endDateYesExclusive end, YYYY-MM-DD
startDateYesInclusive start, YYYY-MM-DD
aggregationNoRoll-up periodDay

TDQS

A4.4/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description fully carries the behavioral burden. It reveals the comparison logic, the weather-control mechanism (irradiance), and the three mutually exclusive diagnoses (dead inverter, reporting gap, bad weather). This is rich, actionable context far beyond a typical one-liner.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three sentences with zero fluff. The methodology is front-loaded, followed by the fault distinctions, then the practical usage examples. Every sentence contributes to the agent's understanding.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description covers the core algorithm and use cases, which is the essential knowledge for calling this diagnostic tool. However, with no output schema present, it does not explicitly state what the tool returns or mention any prerequisites beyond the parameters. The missing return format is a minor gap.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% with clear parameter descriptions (nodeId, inclusive/exclusive dates, aggregation enum). The description only references 'a date range' and does not add semantic meaning beyond the schema, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb ('Diagnose') with a precise resource ('solar site') and method ('comparing each inverter against its own siblings, with irradiance as the weather control'). It further enumerates three distinct fault outcomes, clearly differentiating it from generic tools like get_anomalies or compare_fleet.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides explicit when-to-use scenarios: 'is anything wrong at this site', 'which inverter is broken', or 'why did output drop'. It does not, however, name alternatives or state when not to use the tool, so it stops short of a full 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_anomaliesRead anomaly detection outputA

Read the output of the platform's own ML anomaly detector for a node, where one is published. Each reading carries the predicted value, the actual value, the error between them, the irradiance at the time and an ANOMALY/NOMINAL status. Use this when you want the platform's own verdict rather than computing one yourself, and to cross-check what diagnose_site concluded. Node 392 is a public example.

NameRequiredDescriptionDefault
nodeIdYesSolarNetwork node ID
endDateNoExclusive end, YYYY-MM-DD
startDateNoInclusive start, YYYY-MM-DD. Omit for the latest readings

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden of behavioral disclosure. It clearly indicates this is a read operation, scoped to nodes where an anomaly output is published, and enumerates the contents of each reading (predicted value, actual value, error, irradiance, ANOMALY/NOMINAL status). It does not state what happens when no output is published or whether results are ordered, which are minor gaps for a read-only tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three sentences, each adding value: the first defines the operation and scope, the second specifies the returned fields, and the third gives usage context plus a concrete example. There is no padding, and the essential information is front-loaded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple three-parameter read tool with no output schema, the description adequately covers the return contents and gives a sibling reference for cross-checking. It could additionally state the behavior when no anomaly output is published, but overall the description is sufficient for an agent to call the tool correctly with the schema's help.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, with descriptions for nodeId, startDate, and endDate already present. The tool description adds context about the readings but does not enhance parameter-level meaning beyond the schema, such as date range interpretation or the effect of omitting startDate. Baseline 3 is appropriate because the schema already documents the parameters.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb and resource: "Read the output of the platform's own ML anomaly detector for a node." It clearly distinguishes this from siblings by emphasizing the platform's own ML verdict, and later contrasts it with computing one's own verdict and with diagnose_site. An agent can tell exactly what this tool does and what it does not do.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly states when to use the tool: "Use this when you want the platform's own verdict rather than computing one yourself, and to cross-check what diagnose_site concluded." It names the alternative (diagnose_site) and provides a decision rule, plus a concrete public example node for testing. This is strong routing guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_energyGet accumulated energyA

Get true accumulated energy (watt-hours) between two dates from meter readings, rather than averaging instantaneous power. Use this for 'how much did this site generate' questions, and for anything reporting- or billing-shaped, because averaging watts loses accuracy on accumulating properties.

NameRequiredDescriptionDefault
nodeIdsYesNode IDs
sourceIdsNoRestrict to these source IDs; omit for all sources
readingTypeNoDifference is the usual choice for energy over a periodDifference
localEndDateYesExclusive end in node-local time, YYYY-MM-DDTHH:mm
localStartDateYesInclusive start in node-local time, YYYY-MM-DDTHH:mm

TDQS

A4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden. It discloses that this tool computes from meter readings rather than averaging instantaneous power, which is a key behavioral trait. However, it does not describe the response shape, how missing readings are handled, or whether results are summed across multiple node IDs. For a no-annotation tool, this is adequate but with room to add more behavioral context.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, no wasted words. The core purpose and key differentiator are front-loaded, and the usage guidance follows naturally. Every sentence earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool with 5 parameters, no output schema, and no annotations, the description gives purpose, usage context, and a critical behavioral distinction. It does not explain the return value, but for a reporting-oriented tool, this is a notable gap. Still, the description is strong enough that an agent can decide when to use it and what to expect conceptually.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema covers all parameters with descriptions (100% coverage), so the baseline is 3. The description adds a little semantic value by explaining why 'Difference' is the usual reading type, which helps an agent understand the default parameter. However, it does not go into detail about the date format or node-local time, which is already in the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific action ('Get true accumulated energy') with a precise resource ('meter readings') and unit ('watt-hours'). It explicitly contrasts with averaging instantaneous power, distinguishing it from siblings like get_latest and query_datum without needing to open their schemas.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly says when to use it: for 'how much did this site generate' questions and reporting/billing-shaped needs. It also gives a reason (averaging loses accuracy). It does not explicitly name alternative tools to use instead, but the context signals and sibling list imply there are other query tools, so the guidance is clear but not fully exclusionary.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_latestGet latest readingsA

Get the most recent reading for each source on a node, including weather and irradiance where available. Use this for 'what is happening right now' and to check whether a stream is still live. Note that generation is legitimately zero at night.

NameRequiredDescriptionDefault
nodeIdYesSolarNetwork node ID
sourceIdsNoRestrict to these source IDs; omit for all sources

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the behavioral disclosure burden. It adds useful interpretation beyond the schema by noting that generation is legitimately zero at night and that weather/irradiance are included where available. This helps the agent avoid misreading valid nighttime data as a failure.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short sentences, each earning its place: the first states the core behavior, the second gives the primary use case, and the third provides a critical interpretation caveat. It is front-loaded and free of filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple read-style tool with two well-documented parameters and no output schema, the description is largely complete. It explains purpose, when to use it, and a key data-interpretation nuance. A small gap is that it does not describe what happens when no recent reading exists or how to interpret missing sources, but this is minor.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents nodeId and sourceIds. The description reinforces the per-source aggregation concept and the optional restriction to specific source IDs, but does not need to add substantial parameter-level detail.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool retrieves the most recent reading per source on a node, including weather and irradiance when available. This distinguishes it from siblings like query_datum or get_energy by focusing on latest status rather than history or aggregates.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly tells the agent when to use it: for 'what is happening right now' and for checking if a stream is still live. It does not explicitly name alternatives or exclusion criteria, but the context is clear enough for correct selection.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_public_nodesList known public nodesA

List SolarNetwork nodes known to be readable without credentials, from a catalogue built by scanning node IDs 1-5000. Use this first when you do not have a node ID in hand, since there is no public endpoint that enumerates nodes. Filter to live nodes to avoid ones that stopped reporting years ago.

NameRequiredDescriptionDefault
liveOnlyNoOnly nodes with data since 2026-08-01
timeZoneNoFilter by IANA timezone substring, e.g. 'America'

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden. It discloses that nodes are readable without credentials, that the catalogue comes from scanning IDs 1-5000, and that dead nodes should be filtered to avoid stale data. It does not mention output format or rate limits, but these are less critical for a simple list operation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three sentences: purpose, usage guidance, and filtering tip. Every sentence earns its place, with the core behavior front-loaded and no wasted words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given two optional parameters and no output schema, the description adequately covers purpose, scope, and usage. It could mention what fields are returned or how results are ordered, but an agent can invoke the tool correctly with the information provided.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the baseline is 3. The description adds a rationale for the liveOnly parameter ('avoid ones that stopped reporting years ago') but does not add new meaning for either parameter beyond what the schema already provides.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool lists SolarNetwork nodes that are publicly readable, sourced from a catalogue built by scanning node IDs 1-5000. This is a specific verb+resource and differentiates it from sibling tools that operate on known nodes or sources.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly instructs to use this tool first when no node ID is available, and explains why (no public endpoint that enumerates nodes). It also advises filtering to live nodes to avoid stale entries, but it does not name alternative tools for when a node ID is already known.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_sourcesList node sourcesA

List the streams reporting on a SolarNetwork node, classified by what they measure: GEN (site generation meter), INV (individual inverter), PYR (pyranometer, i.e. solar irradiance), WEA (weather). Also returns the node's data window and timezone. Always start here when you do not already know what a node measures.

NameRequiredDescriptionDefault
nodeIdYesSolarNetwork node ID

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden of behavioral disclosure. It clearly indicates a read-only listing operation ('List'), explains the classification logic, and additionally discloses that it returns the node's data window and timezone, which is beyond a simple listing. It does not mention error conditions or rate limits, but for a simple retrieval tool this is acceptable.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences, both of which are purposeful. The first sentence front-loads the core function and classification details, the second provides a usage directive. There is no fluff or redundancy, and each sentence earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool with a single parameter, no output schema, and no annotations, the description covers all necessary aspects: what it does, what it returns (streams classification, data window, timezone), and when to use it. Nothing essential is missing for an agent to correctly invoke this tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema description coverage is 100% (nodeId is fully described as 'SolarNetwork node ID'). The tool description does not add any additional meaning to the parameter beyond what the schema already provides. Per the baseline rule, when schema coverage is high, a score of 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb ('List') and resource ('streams reporting on a SolarNetwork node') and details the classification categories (GEN, INV, PYR, WEA). This clearly distinguishes it from sibling tools like get_latest or query_datum, which focus on data retrieval rather than listing structural information about a node.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides explicit usage guidance: 'Always start here when you do not already know what a node measures.' This tells the agent the exact trigger condition for using this tool and implies that if the node's measurements are already known, other tools may be more suitable. While it doesn't name specific alternatives, the contextual cue is strong and actionable.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

query_datumQuery time-series datumA

Query time-series data over a date range, rolled up by an aggregation period. Accepts multiple nodes at once. Returns one series per source with mean power, total energy and mean irradiance. Use Day for week-to-month questions, Hour or FifteenMinute to inspect a single day's shape, and Month for year-scale trends. Note that watts is averaged power; for true energy totals use get_energy instead.

NameRequiredDescriptionDefault
endDateYesExclusive end, YYYY-MM-DD
nodeIdsYesOne or more SolarNetwork node IDs
sourceIdsNoRestrict to these source IDs; omit for all sources
startDateYesInclusive start, YYYY-MM-DD
aggregationNoRoll-up periodDay

TDQS

A4.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Since no annotations are provided, the description carries the burden of behavioral disclosure. It discloses that 'watts' is averaged power (not total) and points to get_energy for true totals, which is a meaningful behavioral nuance. However, it doesn't mention whether the tool is read-only or any potential side effects, though as a query that is implied. It could also disclose behavior around multiple sources or response size, but the key nuance is covered.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise, front-loaded with the core purpose, and every sentence adds value. It packs essential information into three sentences with no fluff, and the alternative tool reference is clearly positioned at the end. Structure is effective for quick agent parsing.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a query tool with 5 parameters all documented, no output schema (so the description's summary of returned metrics is essential), and guidance on parameter selection, the description is complete. It covers what the tool does, how to use it, and where to go for alternative functionality. There are no missing pieces an agent would need to call it correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema covers all parameters with descriptions (100% coverage), so baseline is 3. The description adds value by providing aggregation selection guidance (Day, Hour, Month) that goes beyond the enum values, effectively helping the agent choose the right parameter value. It also clarifies the semantics of the 'watts' output, which is related to the data returned. This elevates it above the baseline.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool queries time-series data over a date range with aggregation, accepts multiple nodes, and returns specific metrics (mean power, total energy, mean irradiance). It uses specific verbs and resources, and distinguishes itself from get_energy by clarifying the difference between averaged power and true energy totals.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It provides explicit guidance on when to use different aggregation periods (Day for week-to-month, Hour/FifteenMinute for single-day shape, Month for year trends) and explicitly names an alternative tool (get_energy) for energy totals, telling the agent when NOT to use this tool.

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.

  1. 10 tool updatesv0.3.0
    • First observedasset_review
    • First observedcompare_fleet
    • First observedcreate_service_report
    • First observeddiagnose_site
    • First observedget_anomalies
    • First observedget_energy
    • First observedget_latest
    • First observedlist_public_nodes
    • First observedlist_sources
    • First observedquery_datum

TDQS

A4.2/5.0

Scored across 10 tools

Disambiguation4/5

Most tools target clearly distinct purposes: discovery, latest reading, aggregated time-series, true energy, quick diagnosis, fleet ranking, ML verdicts, event history, reporting, and node discovery. Two close pairs (query_datum/get_energy and diagnose_site/asset_review) overlap enough that agents could pick the wrong one, but the descriptions explicitly steer usage, keeping misselection risk low.

Naming Consistency4/5

Names are uniformly lowercase snake_case and mostly follow a verb_noun pattern (list_sources, get_energy, diagnose_site, create_service_report). Minor deviations: get_latest uses an adjective as the object, and asset_review inverts the verb_noun order, but all names remain easily parseable and predictable.

Tool Count5/5

Ten tools is squarely in the well-scoped range for a solar monitoring domain. Each tool earns its place: two for discovery, one for live status, two for historical data access, three for the diagnostics cluster, one for fleet comparison, and one for report generation. No redundant or filler tools.

Completeness4/5

The set covers the full analysis lifecycle: discovering public nodes, enumerating sources, reading current state, querying both averaged and true energy, diagnosing faults at both quick and event-level granularity, cross-checking with ML output, comparing sites, and producing serviceready reports. Minor gaps include no raw non-aggregated datum access and no site metadata endpoint, but core workflows have no dead ends.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    D
    maintenance
    An MCP server that enables AI assistants to look up solar permitting authorities, estimate solar production via PVWatts, and retrieve irradiance data. It streamlines the creation of solar-aware workflows by integrating industry-standard APIs like NREL.
    MIT
  • A
    license
    B
    quality
    D
    maintenance
    Connects AI agents to energy infrastructure with 30+ tools for managing sites, assets, dispatch, settlements, compliance, and carbon tracking.
    34
    31 npm
    1
    MIT
  • A
    license
    Not graded
    quality
    B
    maintenance
    Provides free energy intelligence APIs for AI agents: solar production estimates, US clean-energy incentives by ZIP, home Energy Node Scores, contractor search, and consented installer routing.
    MIT
  • A
    license
    Not graded
    quality
    C
    maintenance
    Enables AI assistants to list demo inverter sites, inspect production, pull weather context, and get deterministic panel-cleaning recommendations over MCP using synthetic solar operations data.
    MIT