{"schema":"https://axhub.dev/mcp/manifest/v1","server":{"name":"axhub-docs","version":"0.1.0-alpha","description":"AxHub MCP server — deploys, logs, RBAC, and cost primitives exposed to AI agents."},"baseUrl":"https://docs.jocodingax.ai","tools":[{"name":"register_app","category":"app","summary":"새 앱을 조직에 등록해요. 이름과 slug만 정하면 바로 생기고, 나중에 연결·배포는 언제든 추가할 수 있어요.","scope":"write","risky":true,"stable":true,"input":[{"name":"name","type":"string","required":true,"description":"앱에서 보여질 이름 (예: `hello-ax`)"},{"name":"app_slug","type":"string","required":false,"description":"URL 에 쓰일 slug. 생략하면 `name` 으로 자동 생성"},{"name":"description","type":"string","required":false,"description":"팀원이 보는 간단한 설명"}],"errors":[{"code":"UNAUTHORIZED","status":401},{"code":"FORBIDDEN_SCOPE","status":403},{"code":"APP_KEY_FORBIDDEN","status":403}],"docsUrl":"https://docs.jocodingax.ai/ko/docs/mcp/tools/register_app","related":["import_and_deploy","list_my_apps"]},{"name":"list_my_apps","category":"app","summary":"내가 접근할 수 있는 앱 목록을 한 번에 보여줘요. \"뭐 있는지\" 모를 땐 여기부터 시작하세요.","scope":"read","risky":false,"stable":true,"input":[],"errors":[{"code":"UNAUTHORIZED","status":401},{"code":"FORBIDDEN_SCOPE","status":403},{"code":"APP_KEY_FORBIDDEN","status":403}],"docsUrl":"https://docs.jocodingax.ai/ko/docs/mcp/tools/list_my_apps","related":["get_app_url","whats_next"]},{"name":"get_app_url","category":"app","summary":"배포된 앱이 지금 어디서 돌고 있는지 URL 과 최근 배포 정보를 알려드려요. \"내 앱 어디서 볼 수 있어?\" 에 바로 답해요.","scope":"read","risky":false,"stable":true,"input":[{"name":"app_id","type":"number","required":false,"description":"앱 ID (slug 대신 직접 지정할 때)"},{"name":"app_slug","type":"string","required":false,"description":"앱 slug"}],"errors":[{"code":"UNAUTHORIZED","status":401},{"code":"FORBIDDEN_SCOPE","status":403},{"code":"APP_KEY_FORBIDDEN","status":403}],"docsUrl":"https://docs.jocodingax.ai/ko/docs/mcp/tools/get_app_url","related":["list_my_apps","list_deployments"]},{"name":"manage_app","category":"app","summary":"앱을 수정·보관·복구·삭제해요. `action` 에 뭘 할지 적어주면 돼요. 삭제와 보관은 admin scope 가 있어야 해요.","scope":"write","risky":true,"stable":true,"input":[{"name":"app_id","type":"number","required":true,"description":"대상 앱 ID"},{"name":"action","type":"enum","required":true,"description":"`update` · `archive` · `unarchive` · `delete` 중 하나"}],"errors":[{"code":"UNAUTHORIZED","status":401},{"code":"FORBIDDEN_SCOPE","status":403},{"code":"APP_KEY_FORBIDDEN","status":403}],"docsUrl":"https://docs.jocodingax.ai/ko/docs/mcp/tools/manage_app","related":[]},{"name":"manage_ci","category":"app","summary":"CI 파이프라인을 다뤄요. 실행 목록 보고, 실패한 빌드 다시 돌리고, CI 자체를 켜거나 끌 수 있어요.","scope":"write","risky":true,"stable":true,"input":[{"name":"app_id","type":"number","required":true,"description":"앱 ID"},{"name":"action","type":"enum","required":true,"description":"`list` · `rerun` · `enable` · `disable`"}],"errors":[{"code":"UNAUTHORIZED","status":401},{"code":"FORBIDDEN_SCOPE","status":403},{"code":"APP_KEY_FORBIDDEN","status":403}],"docsUrl":"https://docs.jocodingax.ai/ko/docs/mcp/tools/manage_ci","related":[]},{"name":"import_and_deploy","category":"app","summary":"GitHub 저장소 URL 하나로 앱 생성·연결·첫 배포를 한 번에 끝내요. 제일 빠르게 프로덕션에 올리고 싶을 때 쓰세요.","scope":"admin","risky":true,"stable":true,"input":[{"name":"repo_url","type":"string","required":true,"description":"Git 저장소 URL (예: `https://github.com/acme/hello-ax`)"},{"name":"branch","type":"string","required":false,"description":"배포할 브랜치. 생략하면 default 브랜치"}],"errors":[{"code":"UNAUTHORIZED","status":401},{"code":"FORBIDDEN_SCOPE","status":403},{"code":"APP_KEY_FORBIDDEN","status":403}],"docsUrl":"https://docs.jocodingax.ai/ko/docs/mcp/tools/import_and_deploy","related":["deploy_app","connect_repo"]},{"name":"whats_next","category":"app","summary":"지금 앱에서 뭘 하면 좋을지 다음 액션을 추천해줘요. 환경변수 설정·도메인 연결·첫 배포 같은 단계를 순서대로 안내해요.","scope":"read","risky":false,"stable":true,"input":[{"name":"app_slug","type":"string","required":false,"description":"특정 앱에 대한 제안 (생략 시 조직 전체 관점)"}],"errors":[{"code":"UNAUTHORIZED","status":401},{"code":"FORBIDDEN_SCOPE","status":403},{"code":"APP_KEY_FORBIDDEN","status":403}],"docsUrl":"https://docs.jocodingax.ai/ko/docs/mcp/tools/whats_next","related":[]},{"name":"set_app_spec","category":"app","summary":"앱의 빌드·배포 설정을 저장해요. 저장 시점부터가 아니라 **다음 배포부터** 적용되니 안심하고 바꿔보세요.","scope":"admin","risky":true,"stable":true,"input":[{"name":"app_id","type":"number","required":true,"description":"앱 ID"},{"name":"spec","type":"object","required":true,"description":"runtime·build.command·deploy.region 등 전체 스펙"}],"errors":[{"code":"UNAUTHORIZED","status":401},{"code":"FORBIDDEN_SCOPE","status":403},{"code":"APP_KEY_FORBIDDEN","status":403}],"docsUrl":"https://docs.jocodingax.ai/ko/docs/mcp/tools/set_app_spec","related":[]},{"name":"manage_oauth_client","category":"app","summary":"OAuth 클라이언트를 등록·갱신·회수해요. 외부 앱이 AxHub API 를 호출하도록 할 때 쓰세요.","scope":"admin","risky":true,"stable":true,"input":[{"name":"action","type":"enum","required":true,"description":"`register` · `rotate` · `revoke`"}],"errors":[{"code":"UNAUTHORIZED","status":401},{"code":"FORBIDDEN_SCOPE","status":403},{"code":"APP_KEY_FORBIDDEN","status":403}],"docsUrl":"https://docs.jocodingax.ai/ko/docs/mcp/tools/manage_oauth_client","related":[]},{"name":"env_vars","category":"app","summary":"환경 변수를 목록·추가·수정·삭제해요. 변경 사항은 `restart_app` 을 해야 실제 인스턴스에 반영돼요.","scope":"write","risky":true,"stable":true,"input":[{"name":"app_id","type":"number","required":true,"description":"앱 ID"},{"name":"action","type":"enum","required":true,"description":"`list` · `set` · `update` · `delete`"},{"name":"name","type":"string","required":false,"description":"환경변수 이름 (set/update/delete 시 필수)"},{"name":"value","type":"string","required":false,"description":"값 (set/update 시 필수)"}],"errors":[{"code":"UNAUTHORIZED","status":401},{"code":"FORBIDDEN_SCOPE","status":403},{"code":"APP_KEY_FORBIDDEN","status":403}],"docsUrl":"https://docs.jocodingax.ai/ko/docs/mcp/tools/env_vars","related":["restart_app"]},{"name":"deploy_app","category":"deploy","summary":"방금 푸시한 코드를 프로덕션/프리뷰에 올려요. canary → 100% 로 점진 배포해 안전하게 릴리스해요. 시간이 걸리니 `task` 로 비동기 실행하는 걸 추천해요.","scope":"write","risky":true,"stable":true,"input":[{"name":"app_id","type":"number","required":true,"description":"배포할 앱 ID"},{"name":"branch","type":"string","required":false,"description":"브랜치 (생략 시 연결된 기본 브랜치)"},{"name":"commit_sha","type":"string","required":false,"description":"특정 커밋 지정 (생략 시 브랜치 HEAD)"},{"name":"task","type":"object","required":false,"description":"비동기 task 로 돌리려면 넣으세요 (`ttl`, `pollInterval`)"}],"errors":[{"code":"UNAUTHORIZED","status":401},{"code":"FORBIDDEN_SCOPE","status":403},{"code":"APP_KEY_FORBIDDEN","status":403}],"docsUrl":"https://docs.jocodingax.ai/ko/docs/mcp/tools/deploy_app","related":["rollback_deploy","list_deployments","preflight_check","tail_deploy_logs"]},{"name":"rollback_deploy","category":"deploy","summary":"직전 성공 배포로 지금 바로 되돌려요. 긴급 상황에 가장 먼저 쓰는 tool 이에요. 특정 배포로 가고 싶으면 `deployment_id` 를 주세요.","scope":"write","risky":true,"stable":true,"input":[{"name":"app_id","type":"number","required":true,"description":"앱 ID"},{"name":"deployment_id","type":"number","required":false,"description":"롤백 대상 배포 ID (생략 시 바로 직전)"},{"name":"task","type":"object","required":false,"description":"비동기 실행 옵션"}],"errors":[{"code":"UNAUTHORIZED","status":401},{"code":"FORBIDDEN_SCOPE","status":403},{"code":"APP_KEY_FORBIDDEN","status":403}],"docsUrl":"https://docs.jocodingax.ai/ko/docs/mcp/tools/rollback_deploy","related":["deploy_app","list_deployments"]},{"name":"preflight_check","category":"deploy","summary":"배포해도 될지 미리 확인해요. 빌드·환경변수·도메인·헬스체크를 점검하고 걸릴 만한 걸 알려줘요.","scope":"read","risky":false,"stable":true,"input":[{"name":"app_id","type":"number","required":true,"description":"앱 ID"},{"name":"branch","type":"string","required":false,"description":"대상 브랜치 (기본: 연결된 브랜치)"}],"errors":[{"code":"UNAUTHORIZED","status":401},{"code":"FORBIDDEN_SCOPE","status":403},{"code":"APP_KEY_FORBIDDEN","status":403}],"docsUrl":"https://docs.jocodingax.ai/ko/docs/mcp/tools/preflight_check","related":["deploy_app"]},{"name":"list_deployments","category":"deploy","summary":"최근 배포 히스토리를 상태·시각·커밋·전략까지 같이 보여줘요. 페이지당 최대 20개예요.","scope":"write","risky":false,"stable":true,"input":[{"name":"app_id","type":"number","required":true,"description":"앱 ID"},{"name":"page","type":"number","required":false,"description":"페이지 번호 (기본 1)"},{"name":"per_page","type":"number","required":false,"description":"페이지당 개수 (기본 10, 최대 20)"}],"errors":[{"code":"UNAUTHORIZED","status":401},{"code":"FORBIDDEN_SCOPE","status":403},{"code":"APP_KEY_FORBIDDEN","status":403}],"docsUrl":"https://docs.jocodingax.ai/ko/docs/mcp/tools/list_deployments","related":["deploy_app","rollback_deploy"]},{"name":"restart_app","category":"deploy","summary":"현재 돌고 있는 버전 그대로 인스턴스만 다시 띄워요. 환경변수 바꾸고 반영하고 싶을 때 딱 좋아요.","scope":"write","risky":true,"stable":true,"input":[{"name":"app_id","type":"number","required":true,"description":"앱 ID"}],"errors":[{"code":"UNAUTHORIZED","status":401},{"code":"FORBIDDEN_SCOPE","status":403},{"code":"APP_KEY_FORBIDDEN","status":403}],"docsUrl":"https://docs.jocodingax.ai/ko/docs/mcp/tools/restart_app","related":[]},{"name":"tail_deploy_logs","category":"deploy","summary":"배포 로그의 최근 N줄만 빠르게 가져와요. 배포가 진행 중일 때 실시간 진행 상황 보고 싶다면 이걸 쓰세요.","scope":"write","risky":false,"stable":true,"input":[{"name":"app_id","type":"number","required":true,"description":"앱 ID (테넌트 격리용으로 필수)"},{"name":"deployment_id","type":"number","required":false,"description":"특정 배포 (생략 시 최신)"},{"name":"lines","type":"number","required":false,"description":"가져올 줄 수 (기본 200)"}],"errors":[{"code":"UNAUTHORIZED","status":401},{"code":"FORBIDDEN_SCOPE","status":403},{"code":"APP_KEY_FORBIDDEN","status":403}],"docsUrl":"https://docs.jocodingax.ai/ko/docs/mcp/tools/tail_deploy_logs","related":[]},{"name":"connect_repo","category":"github","summary":"GitHub 저장소를 앱에 연결해요. GitHub App 설치 링크 받기 · 저장소 목록 보기 · 앱-저장소 연결/해제까지 한 tool 에서 해요.","scope":"admin","risky":true,"stable":true,"input":[{"name":"action","type":"enum","required":true,"description":"`install_url` · `list_repos` · `connect` · `disconnect`"},{"name":"app_id","type":"number","required":false,"description":"대상 앱 ID (connect/disconnect 시)"},{"name":"repo_full_name","type":"string","required":false,"description":"`owner/repo` 형식"}],"errors":[{"code":"UNAUTHORIZED","status":401},{"code":"FORBIDDEN_SCOPE","status":403},{"code":"APP_KEY_FORBIDDEN","status":403}],"docsUrl":"https://docs.jocodingax.ai/ko/docs/mcp/tools/connect_repo","related":["import_and_deploy"]},{"name":"manage_table","category":"table","summary":"앱 DB 의 테이블을 관리해요. 목록 보기·스키마 설명은 read, 생성·삭제는 write 가 필요해요.","scope":"read","risky":false,"stable":true,"input":[{"name":"app_id","type":"number","required":true,"description":"앱 ID"},{"name":"action","type":"enum","required":true,"description":"`list` · `describe` · `create` · `drop`"},{"name":"table_name","type":"string","required":false,"description":"대상 테이블 이름 (describe/create/drop 시)"}],"errors":[{"code":"UNAUTHORIZED","status":401},{"code":"FORBIDDEN_SCOPE","status":403},{"code":"APP_KEY_FORBIDDEN","status":403}],"docsUrl":"https://docs.jocodingax.ai/ko/docs/mcp/tools/manage_table","related":[]},{"name":"records","category":"table","summary":"테이블 레코드를 조회·추가·수정·삭제해요. `query` 는 read 만 있으면 되고, 나머지는 write 가 필요해요.","scope":"read","risky":false,"stable":true,"input":[{"name":"app_id","type":"number","required":true,"description":"앱 ID"},{"name":"table_name","type":"string","required":true,"description":"테이블 이름"},{"name":"action","type":"enum","required":true,"description":"`query` · `insert` · `update` · `delete` · `bulk_insert`"},{"name":"filters","type":"object","required":false,"description":"query 시 WHERE 조건"},{"name":"data","type":"object","required":false,"description":"insert/update 시 레코드 데이터"}],"errors":[{"code":"UNAUTHORIZED","status":401},{"code":"FORBIDDEN_SCOPE","status":403},{"code":"APP_KEY_FORBIDDEN","status":403}],"docsUrl":"https://docs.jocodingax.ai/ko/docs/mcp/tools/records","related":[]},{"name":"search_table","category":"table","summary":"테이블의 문자열 컬럼을 검색해요. 컬럼을 지정하면 그 컬럼들에서만 찾아요.","scope":"read","risky":false,"stable":true,"input":[{"name":"app_id","type":"number","required":true,"description":"앱 ID"},{"name":"table_name","type":"string","required":true,"description":"테이블 이름"},{"name":"query","type":"string","required":true,"description":"검색어"},{"name":"columns","type":"array","required":false,"description":"검색 대상 컬럼 (선택)"}],"errors":[{"code":"UNAUTHORIZED","status":401},{"code":"FORBIDDEN_SCOPE","status":403},{"code":"APP_KEY_FORBIDDEN","status":403}],"docsUrl":"https://docs.jocodingax.ai/ko/docs/mcp/tools/search_table","related":[]},{"name":"alter_table","category":"table","summary":"테이블 스키마를 바꿔요. 컬럼 추가·삭제, 외래키 추가·삭제가 가능해요. 프로덕션 DB 를 건드리니 신중하게.","scope":"write","risky":true,"stable":true,"input":[{"name":"app_id","type":"number","required":true,"description":"앱 ID"},{"name":"table_name","type":"string","required":true,"description":"테이블 이름"},{"name":"action","type":"enum","required":true,"description":"`add_column` · `remove_column` · `add_reference` · `remove_reference`"},{"name":"column_name","type":"string","required":false,"description":"컬럼 이름"},{"name":"type","type":"string","required":false,"description":"PostgreSQL 타입 (예: `text`, `integer`)"}],"errors":[{"code":"UNAUTHORIZED","status":401},{"code":"FORBIDDEN_SCOPE","status":403},{"code":"APP_KEY_FORBIDDEN","status":403}],"docsUrl":"https://docs.jocodingax.ai/ko/docs/mcp/tools/alter_table","related":[]},{"name":"list_apis","category":"api","summary":"앱이 노출하는 API 엔드포인트 목록을 보여줘요. 경로·메서드·버전·인증 방식까지 한눈에 확인할 수 있어요.","scope":"read","risky":false,"stable":true,"input":[{"name":"app_id","type":"number","required":true,"description":"앱 ID"}],"errors":[{"code":"UNAUTHORIZED","status":401},{"code":"FORBIDDEN_SCOPE","status":403},{"code":"APP_KEY_FORBIDDEN","status":403}],"docsUrl":"https://docs.jocodingax.ai/ko/docs/mcp/tools/list_apis","related":[]},{"name":"get_api_schema","category":"api","summary":"특정 엔드포인트의 요청·응답 스키마를 가져와요. `path` 는 `list_apis` 에 나온 템플릿 경로 그대로 써주세요.","scope":"read","risky":false,"stable":true,"input":[{"name":"app_id","type":"number","required":true,"description":"앱 ID"},{"name":"path","type":"string","required":true,"description":"`/users/{id}` 같은 템플릿 path"},{"name":"method","type":"string","required":true,"description":"`GET`, `POST`, …"}],"errors":[{"code":"UNAUTHORIZED","status":401},{"code":"FORBIDDEN_SCOPE","status":403},{"code":"APP_KEY_FORBIDDEN","status":403}],"docsUrl":"https://docs.jocodingax.ai/ko/docs/mcp/tools/get_api_schema","related":[]},{"name":"test_api","category":"api","summary":"앱 API 를 실제로 한 번 호출해봐요. Gateway 를 경유하니 실제 프로덕션과 동일한 경로로 검증돼요.","scope":"read","risky":false,"stable":true,"input":[{"name":"app_id","type":"number","required":true,"description":"앱 ID"},{"name":"path","type":"string","required":true,"description":"엔드포인트 path"},{"name":"method","type":"string","required":true,"description":"HTTP method"},{"name":"body","type":"object","required":false,"description":"요청 본문"},{"name":"headers","type":"object","required":false,"description":"추가 헤더"}],"errors":[{"code":"UNAUTHORIZED","status":401},{"code":"FORBIDDEN_SCOPE","status":403},{"code":"APP_KEY_FORBIDDEN","status":403}],"docsUrl":"https://docs.jocodingax.ai/ko/docs/mcp/tools/test_api","related":[]},{"name":"manage_api_key","category":"api","summary":"앱 단위 API 키를 발급·회전·삭제해요. 키는 한 번만 보여주니 발급 직후 안전하게 저장해 두세요.","scope":"admin","risky":true,"stable":true,"input":[{"name":"app_id","type":"number","required":true,"description":"앱 ID"},{"name":"action","type":"enum","required":true,"description":"`list` · `create` · `delete` · `rotate`"},{"name":"name","type":"string","required":false,"description":"키 이름 (create 시)"}],"errors":[{"code":"UNAUTHORIZED","status":401},{"code":"FORBIDDEN_SCOPE","status":403},{"code":"APP_KEY_FORBIDDEN","status":403}],"docsUrl":"https://docs.jocodingax.ai/ko/docs/mcp/tools/manage_api_key","related":[]},{"name":"discover_apis","category":"api","summary":"같은 조직의 다른 앱이 제공하는 API 중에 내가 호출할 수 있는 걸 찾아요. 권한 기반 필터링까지 해줘요.","scope":"read","risky":false,"stable":true,"input":[{"name":"query","type":"string","required":false,"description":"검색어"},{"name":"target_app_slug","type":"string","required":false,"description":"특정 앱으로 필터"}],"errors":[{"code":"UNAUTHORIZED","status":401},{"code":"FORBIDDEN_SCOPE","status":403},{"code":"APP_KEY_FORBIDDEN","status":403}],"docsUrl":"https://docs.jocodingax.ai/ko/docs/mcp/tools/discover_apis","related":[]}],"plannedTotal":22,"currentlyDocumented":26}