API 키 발급 — 1분
키는 에이전트가 내 계정으로 발행하기 위한 열쇠입니다. 이 자리에서 바로 발급됩니다 — 발급하면 아래 2단계의 명령어에 키가 자동으로 채워집니다.
- · 키는 발급 직후 한 번만 표시됩니다 — 아래 명령어를 이 화면에서 바로 복사하세요.
- · 발급한 키의 목록·폐기는 설정 → API 키에서.
쓰는 에이전트에 연결
아래에서 쓰는 도구 하나만 골라 따라 하세요. 명령어의 op_내_키 자리에 1단계에서 발급한 키를 넣습니다.
Claude Code
지금 바로터미널에서 아래 한 줄이면 끝. 이후 Claude Code가 onepage_publish 같은 도구를 알아서 씁니다.
claude mcp add --transport http onepage https://onepage.mabrolabs.com/api/mcp --header "Authorization: Bearer op_내_키"
Cursor
지금 바로~/.cursor/mcp.json(전역) 또는 프로젝트의 .cursor/mcp.json에 아래를 추가하세요.
{
"mcpServers": {
"onepage": {
"url": "https://onepage.mabrolabs.com/api/mcp",
"headers": { "Authorization": "Bearer op_내_키" }
}
}
}그 외 코딩 에이전트 (Codex CLI, Devin 등)
지금 바로MCP가 없어도 됩니다. 이 페이지 맨 아래의 에이전트 가이드 원문을 CLAUDE.md·AGENTS.md 등 에이전트 지침 파일에 붙여넣고, 키는 환경변수 ONEPAGE_API_KEY로 두면 에이전트가 REST API를 직접 호출합니다.
claude.ai 웹 · Claude Desktop
준비 중claude.ai의 커스텀 커넥터는 OAuth 로그인을 요구합니다. OnePage의 OAuth 지원을 준비 중이며, 열리면 URL 하나 등록으로 연결됩니다. 그때까지는 Claude가 만든 HTML을 홈 드랍존에 붙여넣는 게 가장 빠릅니다.
ChatGPT
준비 중ChatGPT 커넥터도 마찬가지로 OAuth 지원 후 열립니다. 지금은 ChatGPT가 만든 결과물을 홈 드랍존에 붙여넣어 발행하세요 — 로그인 없이도 됩니다.
이렇게 말해보세요
연결이 끝났다면 별도 명령어는 없습니다. 그냥 대화하세요.
"방금 만든 랜딩페이지, onepage에 발행해줘"
→ 30초 뒤 공유 링크가 돌아옵니다
"헤더를 검정으로 바꾸고 같은 링크로 업데이트해줘"
→ URL은 그대로, 내용만 바뀝니다. 받은 사람은 새로고침만 하면 됩니다
"내가 발행한 페이지 목록 보여줘"
→ 제목·링크·조회수를 정리해서 보여줍니다
"이번 주 보고서 3개를 weekly 컬렉션으로 묶어서 올려줘"
→ 자동 목차가 있는 컬렉션 페이지가 생깁니다
핵심은 두 번째입니다 — 한 번 공유한 링크는 죽지 않습니다. 피드백을 받고 에이전트에게 고치라고 하면, 같은 URL이 새 내용을 보여줍니다.
앞으로 열리는 것
- OAuth 로그인 연결 — claude.ai·ChatGPT 커넥터에서 키 복사 없이 “OnePage로 로그인” 한 번으로 연결
- 원클릭 설치 — “Add to Cursor” 버튼처럼 명령어 복사 없이 버튼 하나로 연결
- MCP 레지스트리 등재 — 클라이언트의 서버 디렉토리에서 onepage를 바로 검색·설치
에이전트 가이드 원문
CLAUDE.md 등에 붙여넣는 전문 — 에이전트가 직접 읽게 하려면 https://onepage.mabrolabs.com/llms.txt를 fetch하라고 해도 됩니다
# OnePage API — 에이전트 가이드
HTML 또는 Markdown을 게시하면 즉시 공유 가능한 영구 URL이 됩니다.
이 문서 전체를 에이전트 지침(CLAUDE.md, 시스템 프롬프트 등)에 붙여넣어 쓰세요.
원문: https://onepage.mabrolabs.com/llms.txt
- Base URL: `https://onepage.mabrolabs.com/api/v1`
- 인증: 모든 요청에 `Authorization: Bearer <API_KEY>` 헤더. 키는 https://onepage.mabrolabs.com/settings 에서 발급 (`op_`로 시작)
- 본문은 JSON. 실패 시 `{ "error": { "code": "...", "message": "..." } }` + HTTP 상태코드
- 제한: 콘텐츠 2MB, 키당 분당 쓰기 10회 · 읽기 60회 (429면 잠시 후 재시도)
## 페이지 게시
`POST /pages`
```json
{
"title": "주간 리포트",
"html": "<!doctype html>... 또는 Markdown 원문",
"contentType": "html",
"collection": "my-collection",
"description": "이번 주 완료 항목과 다음 주 계획 요약.",
"ogImage": "https://example.com/cover.png"
}
```
- `contentType`: `"html"`(기본) 또는 `"markdown"`. Markdown일 때도 원문은 `html` 필드에 넣습니다.
- `collection`: 선택. 내 컬렉션의 slug — 게시와 동시에 그 컬렉션 맨 뒤에 배치됩니다.
- `title` 생략 시 콘텐츠에서 자동 유도됩니다 (Markdown: frontmatter `title` > 첫 헤딩, HTML: `<title>`).
- **공유 미리보기(OG) — 링크를 카톡/슬랙/X에 붙였을 때 뜨는 제목·설명·썸네일:**
- `title` → og:title, `description` → og:description(~2문장 권장, 최대 300자), `ogImage` → og:image.
- `ogImage`는 **공개 접근되는 외부 이미지 URL을 그대로** 넣으면 됩니다(http(s)://, 권장 1200×630). onepage에 업로드할 필요 없습니다.
- 생략하면 `description`은 본문 앞부분에서 자동 추출, 썸네일은 제목 기반 이미지가 자동 생성됩니다. slug가 랜덤이라도 미리보기는 이렇게 채워집니다.
- Markdown이면 위 세 값을 요청 필드 대신 문서 맨 앞 `---` frontmatter(`title`, `description`, `image`; 그밖에 `author`, `date`, `tags`)로 넣어도 동일하게 적용됩니다. 요청 필드와 frontmatter가 겹치면 요청 필드가 우선입니다. `date: false`로 날짜 표시를 끌 수 있습니다.
- 응답: `201 { "page": { "slug", "url", "title", "collection", "createdAt" } }` — 이 `url`을 사용자에게 전달하세요.
## 페이지 수정 — 같은 URL 제자리 갱신
`PATCH /pages/{slug}` — 보낸 필드만 갱신됩니다.
- 필드: `title`, `html`, `contentType`, `collection`(slug 또는 `null`=컬렉션에서 분리), `position`(0 이상 정수), `description`, `ogImage`
- `description`·`ogImage`에 빈 문자열(`""`) 또는 `null`을 보내면 명시값을 지워 자동 추출/생성으로 되돌립니다.
- 같은 문서를 다시 게시할 때는 새 페이지를 만들지 말고 반드시 PATCH로 갱신하세요. URL은 변하지 않습니다.
## 페이지 목록 · 삭제
- `GET /pages?collection={slug}&limit=50&offset=0` → `{ "pages": [ { "slug", "url", "title", "collection", "contentType", "createdAt", "updatedAt" } ] }` (본문 미포함)
- `DELETE /pages/{slug}` → `{ "success": true }`
## 컬렉션 — 페이지를 묶는 자동 목차
- `POST /collections` — `{ "title": "...", "slug"?: "...", "description"?: "..." }` (slug는 소문자/숫자/하이픈 3~32자, 생략 시 자동 생성) → `201 { "collection": { "slug", "url", "title", "createdAt" } }`
- `GET /collections` → `{ "collections": [ { "slug", "url", "title", "description", "pageCount", "createdAt" } ] }`
## 예시 (curl)
```bash
curl -X POST https://onepage.mabrolabs.com/api/v1/pages \
-H "Authorization: Bearer $ONEPAGE_API_KEY" \
-H "Content-Type: application/json" \
-d '{"title":"주간 리포트","contentType":"markdown","html":"# 주간 리포트\n\n이번 주 완료 항목입니다."}'
```
## 규칙
- 한 번 만들어진 URL은 죽지 않습니다. 링크를 바꾸지 말고 PATCH로 내용을 갱신하세요.
- 게시물은 기본적으로 unlisted — 링크를 아는 사람만 볼 수 있고 목록/검색에는 노출되지 않습니다.
- 작업을 마치면 결과 `url`을 사용자에게 보여주세요.