Skip to content

feat: MCP get_pass_chart — agents get a rendered sky chart back - #16

Merged
coffee-converter merged 9 commits into
mainfrom
seeksat-mcp-pass-chart
Jun 15, 2026
Merged

feat: MCP get_pass_chart — agents get a rendered sky chart back#16
coffee-converter merged 9 commits into
mainfrom
seeksat-mcp-pass-chart

Conversation

@coffee-converter

Copy link
Copy Markdown
Owner

Summary

Adds an MCP tool, get_pass_chart, that returns a rendered polar sky chart (PNG) of a satellite's next pass over a location — the same annotated chart the web app shows (horizon circle, the pass arc, and the moon/planets/stars in their real positions), handed back to an AI agent as an image. Almost no MCP servers return rendered visuals; an agent that answers "when can I see the ISS from Tokyo?" with an actual picture of where to look is a real standout.

Reuses the existing OG-image render pipeline — no new rendering. renderPassChartSVG + @resvg/resvg-wasm already produce the chart server-side for share-link images; the MCP's makeEcefSampler is a drop-in for the OG issEcefAt.

  • get_pass_chart(satellite, lat/lon or location, mode?) → finds the next pass of that mode (72h scan), renders it, returns an image + text content block (text-only when there's no upcoming pass, so it degrades gracefully on text-only clients).
  • New nextPassWindow exposes the next pass's raw window (factored out of summarizePass via a shared peakOf); rasterizeSvg(svg, {width}) generalizes rasterizeCard; renderPassChartSVG now takes a satName for the chart title.
  • Tier-gated + usage-logged like the other tools; listed on /llms.txt, the /mcp page, and SKILL.md.

Test plan

  • npm test — 381/381 pass, incl. a node:test integration test that runs the real DOM + resvg-wasm render (returns a non-empty PNG for a pass; text-only for none).
  • npm run typecheck && npm run build — clean; the {type:'image'} content block typechecks against the MCP SDK schema natively.
  • Manual (post-deploy, ISS is seeded): tools/call get_pass_chart {satellite:"ISS", location:"Tokyo", mode:"radio"} → an image content block (multi-KB base64 PNG) + a text summary.

Spec/plan: docs/superpowers/{specs,plans}/2026-06-15-mcp-pass-chart*.

@vercel

vercel Bot commented Jun 15, 2026

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
seeksat Ready Ready Preview, Comment Jun 15, 2026 3:28pm

Request Review

@coffee-converter
coffee-converter merged commit b0032d5 into main Jun 15, 2026
0 of 2 checks passed
@coffee-converter
coffee-converter deleted the seeksat-mcp-pass-chart branch June 15, 2026 15:27
coffee-converter added a commit that referenced this pull request Jul 3, 2026
* docs: spec for MCP get_pass_chart (rendered sky chart tool)

* docs: implementation plan for MCP get_pass_chart

* refactor(og): rasterizeSvg(svg, {width}); rasterizeCard delegates

* feat(mcp): nextPassWindow — expose the next pass's raw window

* feat(og): renderPassChartSVG accepts satName for the chart title

* feat(mcp): pass-chart orchestrator — next pass -> PNG + summary

* feat(mcp): get_pass_chart tool returns an image + text content block

* docs(mcp): list get_pass_chart on llms.txt / mcp page / SKILL.md

* fix(mcp): label the chart by coordinates when no place name is given

Was 'over Observer' for raw lat/lon; now shows the coords in the chart
title and summary.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant