Moonleap is built to be read by a coding agent, not by a person in a dashboard. The connection is a Model Context Protocol server at https://moonleap.io/mcp. Every client below talks to the same endpoint; the only difference is where the URL goes.
How do I connect in one command?
Answer. Add the HTTP server to your client, then approve the browser window that opens. There is no API key to copy.
Claude Code:
claude mcp add --transport http moonleap https://moonleap.io/mcp
Codex CLI:
codex mcp add moonleap --url https://moonleap.io/mcp
codex mcp login moonleap
Gemini CLI:
gemini mcp add --transport http moonleap https://moonleap.io/mcp
VS Code:
code --add-mcp '{"name":"moonleap","type":"http","url":"https://moonleap.io/mcp"}'
Cursor reads .cursor/mcp.json in the project (or ~/.cursor/mcp.json for every project); Windsurf reads ~/.codeium/windsurf/mcp_config.json with the key serverUrl instead of url:
{ "mcpServers": { "moonleap": { "url": "https://moonleap.io/mcp" } } }
Claude Desktop and claude.ai take the same URL under Settings, Connectors, "Add custom connector". Anything that cannot do OAuth (a CI job, a script) uses an API key from Settings as a Authorization: Bearer header instead.
The first tool call opens a browser tab on moonleap.io. You sign in (Google, GitHub or an e-mail link), approve the client, and the tab closes. The client keeps a token; Moonleap keeps a record of which client is connected, visible in Settings, revocable there.
What does the agent see once connected?
Answer. Fifteen tools, and one of them is meant to be called first: get_overview returns the whole state of a project in a single response.
The overview carries the open findings with their evidence and a fix recipe, the ones you snoozed with their return dates, content ideas with briefs, live Search Console and GA4 movement when Google is connected, the AI-search mention rate, security state, the watch alerts and last week's measurements against the week before, and a ranked list of what to do first. The narrower tools (get_findings, get_insights, get_watch) exist for more rows, not for a different picture.
- get_overview
- the whole project, ranked
- get_findings
- open and snoozed findings
- get_insights
- Search Console, GA4, content ideas
- get_watch
- daily checks, weekly report
- run_analysis
- a full re-analysis (3 a day)
- report_finding
- done, disputed, skipped or snoozed, with a note
- report_content_idea
- the same for a content idea
- run_security_checkup
- the repo-side checkup instructions
What is the working protocol?
Answer. Verify before you fix, show a plan before you touch a file, report every item you were given, and let Moonleap re-measure.
Each finding comes with the URLs and values it was computed from. The agent is asked to check them against the repository first (a finding about a missing hreflang tag is verified in the layout component, not taken on faith), then present a plan, then change only what you approve. After the work it calls report_finding for every item: done with a note saying exactly what changed, disputed with the reason the finding is wrong, skipped or snoozed with a date.
That last step matters more than it looks. A finding marked done gets a three-day grace period for the deploy, then the Monday check re-tests it. If it is still detected, it reopens with a regressed event and the note you wrote attached, so nobody argues about what was tried.
How do I check that the loop is closed?
Answer. Two places: the finding history in the app, and the Monday report.
In the project, each finding shows its events (fetched by the agent, done, disputed, regressed) with dates and notes. On Monday the weekly report lists what the agent shipped, what regressed, and what moved in the measurements. If a finding sits at "fetched" with no report for a week, the agent read it and never came back; ask it to close its items.
FAQ
Does Moonleap need access to my repository?
No. Moonleap reads the public site the way a browser does. The repository work happens on your machine, by your agent, under your approval.
Can I connect one account to several projects?
Yes. One connection serves every project on the account; the agent picks a project by id, and list_projects returns them.
What if my client is not listed?
Any MCP client that supports streamable HTTP with OAuth works with the same URL. For anything else, create an API key in Settings and send it as a bearer token.
Sources
- Moonleap MCP endpoint https://moonleap.io/mcp (streamable HTTP, OAuth 2.1 with dynamic client registration)
- Model Context Protocol specification https://modelcontextprotocol.io/specification
- Claude Code MCP documentation https://docs.anthropic.com/en/docs/claude-code/mcp