MCP 도구
API 키 생성
sosoapi_create_api_key선택한 기능(agent:operate, agent:publish, agent:engage), 선택적 workspace_ids 제한, 최대 365일 수명으로 개인 액세스 키를 생성합니다. 비밀 값은 한 번만 반환되며 다시 읽을 수 없습니다. 에이전트는 자신의 권한 안에서 최대 30일까지만 부여하며 해당 권한이 종료되면 키도 작동을 멈춥니다. API 키 관리 권한이 필요하며 PAT로는 사용할 수 없습니다.
Markdown으로 읽기프로필 및 전송 방식
프로필: full · 전송 방식: stdio, http
클라이언트에 표시할 도구는 core 또는 full로 선택하세요. 권한은 변경되지 않습니다. 로컬 파일 업로드에는 stdio가 필요하며 HTTP에서는 사용할 수 없습니다. 검색에 출력 스키마를 포함하려면 SOSOAPI_OUTPUT_SCHEMAS=1을 설정하세요. 이 설정과 관계없이 도구는 구조화된 결과를 반환합니다.
권한 및 부수 효과
주석은 클라이언트의 도구 설명을 돕습니다. 각 호출은 계속 사용자 인증, 역할, 리소스 접근, 기능 권한을 확인합니다.
{
"readOnlyHint": false,
"destructiveHint": false,
"idempotentHint": false,
"openWorldHint": false
}- /identity-api/api-keys/create: agent:manage_api_keys · synchronous_http_response
입력 필드
필수는 상위 객체와 선택 분기 안에서 필수라는 뜻입니다. 필수 자식이 선택적 상위 객체를 필수로 만들지는 않습니다. 아래 규칙과 필드명은 계약에서 복사했습니다.
| 필드 / 분기 | 유형 / 필수 여부 | 제약 조건 |
|---|---|---|
$ | object상위 객체에서 필수 |
|
name | string상위 객체에서 필수 |
|
lifetime_days | integer선택 / 항목 | 키 만료까지의 일수(1-365, 기본값 365). 위임 에이전트 생성 키는 30일을 초과할 수 없습니다.
|
capabilities | array선택 / 항목 | 키가 할 수 있는 작업. 로그인된 사용자는 operate, publish, engage가 기본값입니다. 위임된 에이전트는 자신의 권한만 부여할 수 있으며 키 관리는 부여할 수 없습니다.
|
capabilities[] | string선택 / 항목 |
|
workspace_ids | array선택 / 항목 | 키를 지정 Workspace로 제한합니다. 생략하면 사용자가 접근할 수 있는 모든 Workspace에 적용됩니다. 제한 키는 활성 Workspace를 사용하는 라우트에도 workspace_id를 지정해야 하며 Organization 전체 읽기는 호출할 수 없습니다.
|
workspace_ids[] | string선택 / 항목 |
|
scopes | array선택 / 항목 | capabilities의 지원 중단 별칭. 정확하게 적용하며 빈 목록은 무시됩니다.
|
scopes[] | string선택 / 항목 |
|
idempotency_key | string선택 / 항목 | 선택 사항. 안전한 재시도에는 같은 키를 사용하세요. 비밀 값은 한 번만 표시됩니다. 재시도에서 이미 생성된 키를 찾으면 다시 표시하는 대신 409 IDEMPOTENT_REPLAY(details.existing_key가 해당 키 식별)를 반환합니다. 그 키를 취소하고 새 idempotency_key로 새 키를 생성하세요.
|
전체 JSON Schema
{
"type": "object",
"properties": {
"name": {
"type": "string",
"minLength": 1,
"maxLength": 80
},
"lifetime_days": {
"description": "Days until the key expires (1-365, default 365). A key created by a delegated agent never lives longer than 30 days.",
"type": "integer",
"minimum": 1,
"maximum": 365
},
"capabilities": {
"description": "What the key may do. Defaults to operate, publish and engage for a signed-in user. A delegated agent can only grant what its own authorization holds (never key management).",
"minItems": 1,
"maxItems": 3,
"type": "array",
"items": {
"type": "string",
"enum": [
"agent:operate",
"agent:publish",
"agent:engage"
]
}
},
"workspace_ids": {
"description": "Limit the key to these Workspaces. Omit it for every Workspace the user can access. A limited key must name its Workspace (workspace_id) on routes that would otherwise use the active Workspace, and cannot call organization-wide reads.",
"minItems": 1,
"maxItems": 100,
"type": "array",
"items": {
"type": "string",
"format": "uuid"
}
},
"scopes": {
"description": "Deprecated alias of capabilities. It is honoured exactly; an empty list is ignored.",
"maxItems": 3,
"type": "array",
"items": {
"type": "string",
"enum": [
"agent:operate",
"agent:publish",
"agent:engage"
]
}
},
"idempotency_key": {
"description": "Optional. Reuse the same key to retry safely. The secret is shown once: a retry that finds the key already created answers 409 IDEMPOTENT_REPLAY (details.existing_key names it) instead of showing it again. Revoke that key and create a new one with a new idempotency_key.",
"type": "string",
"minLength": 8,
"maxLength": 160,
"pattern": "^[!-~]+$"
}
},
"required": [
"name"
],
"additionalProperties": false
}구조화된 출력
이 스키마는 성공한 도구 결과의 structuredContent를 설명합니다. MCP 응답에는 content도 포함되며 호출 실패 시 isError가 설정될 수 있습니다. 게시 시 접수된 요청이나 텍스트 응답을 확인으로 간주하지 말고 게시물의 최종 결과를 읽으세요. 연결된 API 작업에 권한과 재시도 규칙이 설명되어 있습니다.
필수는 상위 객체와 선택 분기 안에서 필수라는 뜻입니다. 필수 자식이 선택적 상위 객체를 필수로 만들지는 않습니다. 아래 규칙과 필드명은 계약에서 복사했습니다.
| 필드 / 분기 | 유형 / 필수 여부 | 제약 조건 |
|---|---|---|
$ | object상위 객체에서 필수 |
|
apiKey | object상위 객체에서 필수 |
|
apiKey.id | string상위 객체에서 필수 |
|
apiKey.name | string상위 객체에서 필수 | — |
apiKey.last_4 | string상위 객체에서 필수 | — |
apiKey.scopes | array상위 객체에서 필수 | — |
apiKey.scopes[] | string선택 / 항목 | — |
apiKey.created_at | string상위 객체에서 필수 |
|
apiKey.expires_at | string | null상위 객체에서 필수 | — |
apiKey.expires_atanyOf 1 | string상위 객체에서 필수 |
|
apiKey.expires_atanyOf 2 | null상위 객체에서 필수 | — |
apiKey.last_used_at | string | null상위 객체에서 필수 | — |
apiKey.last_used_atanyOf 1 | string상위 객체에서 필수 |
|
apiKey.last_used_atanyOf 2 | null상위 객체에서 필수 | — |
apiKey.revoked_at | string | null상위 객체에서 필수 | — |
apiKey.revoked_atanyOf 1 | string상위 객체에서 필수 |
|
apiKey.revoked_atanyOf 2 | null상위 객체에서 필수 | — |
apiKey.status | string상위 객체에서 필수 |
|
apiKey.replaces | object | null상위 객체에서 필수 | — |
apiKey.replacesanyOf 1 | object상위 객체에서 필수 |
|
apiKey.replaces.idanyOf 1 | string상위 객체에서 필수 |
|
apiKey.replaces.nameanyOf 1 | string상위 객체에서 필수 | — |
apiKey.replaces.last_4anyOf 1 | string상위 객체에서 필수 | — |
apiKey.replaces.statusanyOf 1 | string상위 객체에서 필수 |
|
apiKey.replacesanyOf 2 | null상위 객체에서 필수 | — |
apiKey.replaced_by | array상위 객체에서 필수 | — |
apiKey.replaced_by[] | object선택 / 항목 |
|
apiKey.replaced_by[].id | string상위 객체에서 필수 |
|
apiKey.replaced_by[].name | string상위 객체에서 필수 | — |
apiKey.replaced_by[].last_4 | string상위 객체에서 필수 | — |
apiKey.replaced_by[].status | string상위 객체에서 필수 |
|
apiKey.capabilities | array선택 / 항목 | — |
apiKey.capabilities[] | string선택 / 항목 |
|
apiKey.workspace_ids | array | null선택 / 항목 | — |
apiKey.workspace_idsanyOf 1 | array선택 / 항목 | — |
apiKey.workspace_ids[]anyOf 1 | string선택 / 항목 |
|
apiKey.workspace_idsanyOf 2 | null선택 / 항목 | — |
apiKey.created_by_delegated_grant_id | string | null선택 / 항목 | — |
apiKey.created_by_delegated_grant_idanyOf 1 | string선택 / 항목 |
|
apiKey.created_by_delegated_grant_idanyOf 2 | null선택 / 항목 | — |
secret | string상위 객체에서 필수 |
|
전체 JSON Schema
{
"type": "object",
"properties": {
"apiKey": {
"type": "object",
"properties": {
"id": {
"type": "string",
"format": "uuid"
},
"name": {
"type": "string"
},
"last_4": {
"type": "string"
},
"scopes": {
"type": "array",
"items": {
"type": "string"
}
},
"created_at": {
"type": "string",
"format": "date-time",
"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
},
"expires_at": {
"anyOf": [
{
"type": "string",
"format": "date-time",
"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
},
{
"type": "null"
}
]
},
"last_used_at": {
"anyOf": [
{
"type": "string",
"format": "date-time",
"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
},
{
"type": "null"
}
]
},
"revoked_at": {
"anyOf": [
{
"type": "string",
"format": "date-time",
"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
},
{
"type": "null"
}
]
},
"status": {
"type": "string",
"enum": [
"active",
"expired",
"revoked"
]
},
"replaces": {
"anyOf": [
{
"type": "object",
"properties": {
"id": {
"type": "string",
"format": "uuid"
},
"name": {
"type": "string"
},
"last_4": {
"type": "string"
},
"status": {
"type": "string",
"enum": [
"active",
"expired",
"revoked"
]
}
},
"required": [
"id",
"name",
"last_4",
"status"
],
"additionalProperties": false
},
{
"type": "null"
}
]
},
"replaced_by": {
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "string",
"format": "uuid"
},
"name": {
"type": "string"
},
"last_4": {
"type": "string"
},
"status": {
"type": "string",
"enum": [
"active",
"expired",
"revoked"
]
}
},
"required": [
"id",
"name",
"last_4",
"status"
],
"additionalProperties": false
}
},
"capabilities": {
"type": "array",
"items": {
"type": "string",
"enum": [
"agent:operate",
"agent:publish",
"agent:engage"
]
}
},
"workspace_ids": {
"anyOf": [
{
"type": "array",
"items": {
"type": "string",
"format": "uuid"
}
},
{
"type": "null"
}
]
},
"created_by_delegated_grant_id": {
"anyOf": [
{
"type": "string",
"format": "uuid"
},
{
"type": "null"
}
]
}
},
"required": [
"id",
"name",
"last_4",
"scopes",
"created_at",
"expires_at",
"last_used_at",
"revoked_at",
"status",
"replaces",
"replaced_by"
],
"additionalProperties": false
},
"secret": {
"type": "string",
"minLength": 1
}
},
"required": [
"apiKey",
"secret"
],
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false
}도구 호출 예제
예제는 스키마로 확인한 가상 값을 사용합니다. ID를 사용 권한이 있는 값으로, 미디어를 준비된 에셋으로, 날짜를 확인된 게시 시각으로 바꾸세요. 쓰기 제출 전에 계정 적격성을 확인하세요. 이 페이지는 API 요청을 보내지 않습니다.
{
"name": "sosoapi_create_api_key",
"arguments": {
"name": "example"
}
}structuredContent
{
"apiKey": {
"id": "11111111-1111-4111-8111-111111111111",
"name": "example",
"last_4": "example",
"scopes": [],
"created_at": "2099-01-15T09:00:00Z",
"expires_at": null,
"last_used_at": null,
"revoked_at": null,
"status": "active",
"replaces": null,
"replaced_by": []
},
"secret": "example"
}