REST API + MCP 서버
SEO 보고서 API
개발자 및 AI 에이전트
REST를 통해 보고서를 생성하고 완료될 때까지 폴링한 뒤, 팀이 웹사이트에서 보는 동일한 저장된 보고서를 읽습니다. 유료 플랜의 동일한 API 키가 MCP 기능이 있는 모든 에이전트와 연결됩니다.
접근 모델
API 접근은 계정에 연결되고 키가 필요합니다. 플랜을 선택하고 계정에서 API 키를 생성한 뒤, API를 통해 실행하는 모든 새 사이트는 웹사이트에서와 동일하게 플랜의 크레딧을 사용합니다. 크레딧은 매월 첫 날(UTC)에 리셋되고 롤오버되지 않습니다.
웹사이트 세션, API 호출, 그리고 에이전트 세션은 동일한 저장된 보고서 상태에서 읽습니다.
보고서를 생성하고 상태를 폴링한 뒤, 동일한 객체에서 전체 결과를 읽습니다.
사용 가능한 엔드포인트
/api/v1/reports/preview유료 플랜에서 파트너 통합용 점수 미리보기를 생성합니다.
/api/v1/reports새 보고서를 생성하거나 이미 존재하는 보고서를 재사용하십시오. 대신 사이트를 다시 스캔하려면 "forceRerun": true를 추가하세요.
/api/v1/reports/:id최신 보고서 상태 및 섹션을 가져옵니다.
/api/v1/reports/:id/result전체 보고서 결과를 읽습니다.
/api/v1/reports/:id/download?format=json프로그램형 통합을 위해 보고서 페이로드를 JSON 형식으로 내보내기.
빠른 시작: curl을 사용한 SEO 보고서
세 개의 요청이 전체 흐름을 다룹니다. 유료 플랜의 API 키를 사용합니다. 첫 번째는 보고서를 생성하고, 두 번째는 상태가 더 이상 대기 중이거나 실행 중이 아닐 때까지 폴링하며, 세 번째는 내보냅니다. 새 사이트는 한 개의 크레딧을 사용하고, 이미 보고서가 있는 사이트를 다시 실행하면 크레딧을 사용하지 않습니다.
export SEOREPORT_API_KEY="sr__live_your_api_key"
# Send the key as a header file so it never sits in curl's argv, where ps shows
# it to every local user. printf is a shell builtin, so it spawns no process.
auth() { printf 'Authorization: Bearer %s\n' "$SEOREPORT_API_KEY"; }
# 1. Create a report and keep its job ID
JOB_ID=$(curl -s -X POST https://seoreport.dev/api/v1/reports \
-H @<(auth) \
-H "Content-Type: application/json" \
-d '{"url": "example.com"}' | jq -r '.report.jobId')
# 2. Poll until the report is no longer queued or running
while :; do
STATUS=$(curl -s "https://seoreport.dev/api/v1/reports/$JOB_ID" \
-H @<(auth) | jq -r '.report.status')
case "$STATUS" in queued|running) sleep 3 ;; *) break ;; esac
done
echo "status: $STATUS"
# 3. Export the finished report (format=pdf, md and txt also work)
curl -s "https://seoreport.dev/api/v1/reports/$JOB_ID/download?format=json" \
-H @<(auth) -o report.jsonSEO 리포트 API가 반환하는 내용
완료된 리포트는 하나의 JSON 문서로 내보내집니다. 전체 점수와 등급, 영역별 점수, 분석한 페이지 수, 심각도별 미해결 문제, 그리고 수정 순서대로 정렬된 모든 발견 사항이 담기며, 각 발견 사항에는 중요한 이유, 수정 방법, 수정 확인 방법, 근거가 되는 증거와 해당 페이지가 포함됩니다. Markdown, 텍스트, PDF도 같은 진단에서 생성됩니다.
{
"exportVersion": 1,
"jobId": "3f6c2a1e-8d4b-4c7a-9e21-5b0d7f4a6c18",
"targetUrl": "https://example.com",
"status": "completed",
"isSnapshotReady": true,
"auditedAt": "2026-10-14T09:12:41.000Z",
"locale": "en",
"score": { "overall": 72, "band": "stable" },
"areas": [
{ "id": "access_crawl", "name": "Crawl & Index", "score": 61 },
{ "id": "metadata_onpage", "name": "On-Page SEO", "score": 78 },
{ "id": "security", "name": "Security", "score": 84 }
],
"pagesAnalyzed": 24,
"openIssues": { "critical": 0, "high": 2, "medium": 5, "low": 3, "total": 10 },
"findings": [
{
"rank": 1,
"title": "Render parity mismatch",
"status": "fail",
"severity": "high",
"area": { "id": "access_crawl", "name": "Crawl & Index" },
"whyItMatters": "Raw HTML and rendered DOM should tell the same SEO story so crawlers and AI systems do not see conflicting versions of the page.",
"fix": "Ensure raw HTML and rendered DOM contain the same critical SEO elements (title, H1, canonical, meta description, structured data). If content is injected by JavaScript, move it to server-side rendering so crawlers see it immediately.",
"verification": [
"Recheck these recorded examples: https://example.com/pricing. Method: compare the raw HTML with the rendered DOM. Previously observed: H1 present only after rendering",
"Expected after the change: the same critical elements in both. Obtain a fresh capture and compare the same check and URLs; a changed sample alone does not verify a fix."
],
"evidence": ["Raw HTML and rendered DOM were compared for critical elements."],
"pages": ["https://example.com/pricing"]
}
]
}오류와 제한
아래의 각 거부에는 코드가 있습니다. 이를 처리하면 스크립트가 무작정 재시도하지 않습니다.
| 402 | PAYMENT_REQUIRED | 요청에 유료 요금제가 없습니다. 키가 없거나 유효하지 않거나 취소되었거나, 계정에 활성 요금제가 없습니다. 키가 없으면 401이 아니라 402가 반환됩니다. |
| 402 | REPORT_CREDITS_EXHAUSTED | 이번 달 새 사이트 크레딧을 모두 사용했습니다. 이미 보고서가 있는 사이트는 계속 다시 실행할 수 있으며, 크레딧은 매월 1일(UTC)에 초기화됩니다. |
| 429 | FRESH_RUN_LIMIT | 한 계정에서 1시간에 30회를 넘는 새 실행(forceRerun)이 있었습니다. Retry-After 헤더에 표시된 시간만큼 기다리세요. |
| 200 | status: failed | dead_lettered | 보고서를 완료하지 못했습니다. 원인이 기록된 경우 GET /api/v1/reports/:id는 error.code, error.message, error.retryable을 반환합니다. retryable이 true일 때만 다시 시도하세요. |
| 200 | pollAfterMs | 상태를 다시 조회하기 전까지 기다릴 시간입니다. 보고서가 완료되면 0입니다. |
설정 가이드와 레시피
MCP로 AI 에이전트를 연결하는 방법, 코드에서 API를 호출하는 방법, SEO API 비교를 단계별로 안내하는 페이지입니다. 영어로 제공됩니다.
AI 에이전트 연결(MCP)
- Connect SEOReport to Claude Code: MCP setup for SEO audits
- Connect SEOReport to Cursor: MCP setup for SEO audits
- Connect SEOReport to VS Code: MCP setup for GitHub Copilot
- Connect SEOReport to Windsurf (Devin Desktop): MCP setup
- Connect SEOReport to OpenAI Codex CLI: MCP setup for SEO audits
- Connect SEOReport to Gemini CLI: MCP setup for SEO audits
- Connect SEOReport to Claude Desktop: MCP setup for SEO audits
코드에서 API 호출
SEO 모니터링 API
모니터링용으로 등록된 도메인은 매주 재감사를 받습니다. 무언가가 변경되면 알림 주소로 이메일이 전송됩니다: 새로운 치명적 또는 고위험 발견, 해결된 치명적 발견, 또는 다른 점수 밴드로의 이동. 변경이 없는 한 주는 아무것도 전송되지 않습니다.
/api/v1/monitors도메인에 대한 주간 모니터링을 시작합니다; "enabled": false는 일시 중지합니다.
/api/v1/monitors이 계정이 모니터링하는 도메인 목록을 표시합니다.
/api/v1/monitors?url=도메인 모니터링을 중지하고 저장된 결과를 삭제합니다.
# Uses the auth() helper from the quickstart above.
# Re-audit a domain every week and email [email protected] when it changes
curl -X PUT https://seoreport.dev/api/v1/monitors \
-H @<(auth) \
-H "Content-Type: application/json" \
-d '{"url": "example.com", "alertEmail": "[email protected]"}'
# List monitored domains
curl https://seoreport.dev/api/v1/monitors \
-H @<(auth)
# Stop monitoring (pass the host the list returns)
curl -X DELETE "https://seoreport.dev/api/v1/monitors?url=example.com" \
-H @<(auth)모니터링은 유료 플랜에 포함되며 보고서 크레딧을 소모하지 않습니다.
공식 TypeScript 클라이언트
REST API용 타입이 지정된 클라이언트입니다. 플랜의 API 키로 인증한 뒤, TypeScript에서 보고서를 생성, 폴링 및 내보냅니다.
MCP 서버 — 같은 API, 같은 키
MCP를 지원하는 클라이언트를 https://seoreport.dev/mcp 로 연결하고, REST에서 쓰는 것과 같은 Bearer API 키로 인증하세요. 연결 시 리포트와 계정 도구가 자동으로 제공되므로, 에이전트가 별도의 연결 코드 없이 감사를 실행하고 결과를 읽을 수 있습니다.
{
"mcpServers": {
"seoreport": {
"url": "https://seoreport.dev/mcp",
"headers": {
"Authorization": "Bearer sr__live_your_api_key"
}
}
}
}seoreport_create_reportURL에 대한 보고서를 시작하고 작업 ID를 받습니다.
seoreport_get_report_status보고서가 준비될 때까지 작업을 폴링합니다.
seoreport_get_report완료된 보고서의 점수와 발견 사항을 읽습니다.
seoreport_list_reports계정의 보고서 목록을 가져옵니다.
seoreport_get_report_downloadJSON, Markdown, 텍스트, PDF 다운로드 URL을 받습니다.
seoreport_get_account계정의 플랜, 남은 크레딧, 갱신일을 확인합니다.
결제는 직접 청구되지 않고 브라우저 링크를 반환합니다. 에이전트는 시작할 수 있지만, 결제는 사람만 할 수 있습니다. 플랜 해지, API 키 관리, 계정 삭제는 대시보드에서 합니다.