Kosli MCP server
2026년 11월 13일 커밋검색, 읽기 및 API 액션 실행을 위한 범용 도구를 통해 Kosli API를 LLM 클라이언트에 노출합니다.
다른 이름 kosli-dev/mcp-server
- 스타
- 1
- Tools
- —
- 다운로드, 30일
- —
- 최신 버전
- —
- 마지막 커밋
- 2026년 11월 13일
- 라이선스
- MIT
Kosli MCP란?
Kosli은(는) MCP server입니다. 검색, 읽기 및 API 액션 실행을 위한 범용 도구를 통해 Kosli API를 LLM 클라이언트에 노출합니다.
프로젝트 README에서 생성된 요약
Kosli MCP server 정보
개발자는 이 MCP server를 사용하여 Claude Desktop 또는 Claude Code와 같은 LLM 클라이언트를 통해 Kosli API와 직접 상호작용할 수 있습니다. 개별 엔드포인트마다 커스텀 코드를 작성할 필요 없이, 이 서버는 Kosli OpenAPI 사양을 기반으로 동적 카탈로그를 제공합니다. 이를 통해 AI는 작고 일관된 도구 세트를 사용하여 사용 가능한 API 액션을 탐색하고 사용할 수 있습니다.
사용자는 Kosli API 토큰을 사용하여 서버에 연결하며, US 또는 EU 엔드포인트와 같은 다양한 환경에 대해 베이스 URL을 지정할 수 있습니다. 서버는 세 가지 주요 도구를 제공합니다. 자연어를 사용하여 관련 API 액션을 찾는 search_actions, GET 요청을 수행하는 execute_read_action, 그리고 POST, PUT, PATCH 또는 DELETE 작업을 수행하는 execute_write_action입니다. 읽기 액션은 일반적으로 자동 허용되지만, 리소스에 대한 의도하지 않은 변경을 방지하기 위해 쓰기 액션은 MCP 클라이언트 내에서 사용자의 명시적인 승인이 필요합니다.
이 설정은 stdio를 통해 작동하며, 라이브 사양에서 카탈로그를 재생성함으로써 AI가 항상 최신 API 기능을 사용할 수 있도록 보장하는 동시에 도구 인터페이스를 최소한으로 유지하도록 설계되었습니다.
활용 사례
- 1API 기능 탐색AI는 자연어 쿼리를 사용하여 특정 API 액션을 검색하고 사용 가능한 파라미터를 이해할 수 있습니다.
- 2조직 데이터 조회개발자는 읽기 전용 액션을 사용하여 AI에게 환경 또는 스냅샷에 대한 특정 세부 정보를 가져오도록 요청할 수 있습니다.
- 3클라우드 리소스 수정사용자가 특정 액션과 파라미터를 승인하는 경우, AI에게 리소스 생성 또는 삭제 작업을 맡길 수 있습니다.
- 4토큰 사용량 최적화사용자는 컨텍스트 창을 작게 유지하기 위해 API 응답에서 특정 필드만 요청하도록 AI에게 지시할 수 있습니다.
프로젝트의 README를 바탕으로 작성되었습니다. 모든 활용 사례는 해당 내용의 인용문과 대조하여 확인합니다.
구성
KOSLI_API_TOKEN
| 이름 | 설명 | 유형 |
|---|---|---|
| KOSLI_API_TOKEN | — |
자동 검사
2026년 11월 15일에 실행됨전체 보고서 →아직 인증되지 않았습니다. 서버는 80점 이상의 점수, 심각한 결함 없음, 그리고 검사에 충분한 데이터를 갖추어야 합니다. 검사 방식 · 점수를 높이기 위해 수정할 항목
- 소스 저장소 연결 및 접근 가능kosli-dev/mcp-server is public and reachablegithub.com/kosli-dev/mcp-server ↗통과
- 패키지가 이 저장소를 소스로 명시검사되지 않음
- 빌드 출처(Sigstore 증명)검사되지 않음
- 오픈 소스 라이선스 (OSI)MITspdx.org/licenses/MIT.html ↗통과
- 최근 1년 내 커밋 또는 릴리스Last commit or release 2026-11-13github.com/kosli-dev/mcp-server ↗통과
- OpenSSF Scorecard검사되지 않음
- 패키지 이름이 인기 패키지와 유사하지 않음검사되지 않음
- 패키지 및 해당 종속성에 중요한 보안 권고 없음검사되지 않음
- 모델에 대한 숨겨진 지침 없음0 tool descriptions and the README read; no override phrases, credential paths or hidden characters통과
- 파괴적인 도구에 라벨 표시됨검사되지 않음
- 원격 엔드포인트가 MCP 핸드셰이크에 응답검사되지 않음
README
GitHub에서 보기Kosli MCP Server
A Model Context Protocol server that exposes the Kosli API to LLM clients (Claude Code, Claude Desktop, etc.).
[!WARNING] This server is in beta. Tool names, parameters, and behaviour may change between releases. If you need stability, pin a version — e.g.
npx -y @kosli/mcp-server@0.4.0instead ofnpx -y @kosli/mcp-server.
Rather than hand-coding a tool per endpoint, the server ships a catalog generated from Kosli's OpenAPI spec and exposes three generic tools:
search_actions— fuzzy-search the catalog for relevant API actions by natural-language query.execute_read_action— invoke any GET action by ID (read-only, auto-allowed by MCP clients).execute_write_action— invoke any POST/PUT/PATCH/DELETE action by ID (requires approval in MCP clients — see the caution under Usage).
This keeps the tool surface small and lets the catalog stay in sync with the Kosli API by regenerating. MCP clients use the tool annotations to auto-allow reads while gating writes behind user approval.
Requirements
- Node.js ≥ 22
- A Kosli API token
Install & build
npm install
npm run build
Configure
The server reads configuration from environment variables:
| Variable | Required | Default | Notes |
|---|---|---|---|
KOSLI_API_TOKEN |
yes | — | Preferred. KOSLI_API_KEY is accepted as a fallback. |
KOSLI_BASE_URL |
no | https://app.kosli.com |
EU (default), US (https://app.us.kosli.com), or your single-tenant endpoint. |
Wire up to an MCP client
Claude Code
Run this from your project directory (or use --scope user for global):
claude mcp add kosli \
-e KOSLI_API_TOKEN=your-token \
-- npx -y @kosli/mcp-server
Claude Desktop (Desktop Extension)
Download the latest .mcpb file from Releases, then drag it into Claude Desktop or double-click to install. Claude Desktop will prompt you for your API token. This is the recommended method for Claude Desktop as secrets are stored in the OS keychain rather than in a plain-text config file.
[!NOTE] When installing from a
.mcpbfile, Claude Desktop shows a warning that the extension has not been verified by Anthropic. This is expected for any extension installed from a file rather than from the built-in directory. Sideloaded extensions also do not auto-update — you'll need to download and reinstall new versions manually. Both of these limitations go away once the extension is listed in Anthropic's Connectors Directory.
To check that a downloaded bundle was built from this repository by its release workflow, verify its build provenance with the GitHub CLI:
gh attestation verify kosli-mcp-server-<version>.mcpb --repo kosli-dev/mcp-server
Each release also attaches kosli-mcp-server-<version>.cdx.json, a CycloneDX SBOM listing every package bundled in the .mcpb, so you can check a release against new vulnerability advisories.
The attached file itself is not signed. The signed copy is the one attested against the bundle: verifying it proves that this SBOM was published for the exact .mcpb you downloaded. Read that copy rather than the attached file when it matters:
gh attestation verify kosli-mcp-server-<version>.mcpb --repo kosli-dev/mcp-server \
--predicate-type https://cyclonedx.org/bom --format json \
| jq '.[0].verificationResult.statement.predicate' > sbom.cdx.json
The npm package has no SBOM: it ships no lockfile, so npm resolves its dependencies on each install.
Claude Desktop (manual)
Alternatively, add the following to your claude_desktop_config.json (Settings → Developer → Edit Config). This method auto-updates via npx on each restart, but stores secrets in plain text:
{
"mcpServers": {
"kosli": {
"command": "npx",
"args": ["-y", "@kosli/mcp-server"],
"env": {
"KOSLI_API_TOKEN": "your-token"
}
}
}
}
Other MCP clients
The server communicates over stdio. Point any MCP-compatible client at the package via npx -y @kosli/mcp-server and set the KOSLI_API_TOKEN environment variable.
Local checkout
If you're running from a local checkout instead:
{
"mcpServers": {
"kosli": {
"command": "node",
"args": ["/absolute/path/to/mcp-server/dist/index.js"],
"env": {
"KOSLI_API_TOKEN": "your-token"
}
}
}
}
Usage
Typical LLM flow:
- Call
search_actionswith a natural-language query (e.g."list environments") to discover action IDs and their parameter schemas. - Call
execute_read_action(for GET actions) orexecute_write_action(for POST/PUT/PATCH/DELETE) with the chosenactionIdand aparamsobject.
[!IMPORTANT]
execute_write_actioncreates, modifies, and deletes real resources in your Kosli organization. MCP clients gate these calls behind an approval prompt — read the action ID and parameters before approving. An LLM may select the wrong action, or the right action with the wrong parameters, and approval is the only checkpoint before the call is made. Treat deletions and anything touching service accounts or API keys with particular care.
For GET/DELETE, non-path params become query parameters; for other methods they become the JSON body.
Naming the organization
Both execute tools take an org, so one running server reaches any organization
your token has access to:
{ "actionId": "list_environments", "org": "cyber-dojo", "fields": ["name"] }
It is required for every action whose path contains {org}, which is all but
a few of them. There is no configured default: a call that names no org is
refused rather than sent to one nobody chose.
KOSLI_ORG used to supply that default and has been removed. A config that
still sets it starts fine, the value is ignored, and the server says so on
stderr.
An org can also arrive as params.org. The two must agree: two different names
are rejected rather than resolved, since the same tools perform writes.
A write's request body may not name any of the action's own parameters, org
included. Such a field would overwrite what you supplied and send the request
somewhere else, while the approval prompt still showed your value.
The org must be one name, given as a non-empty string. Anything else is rejected
rather than coerced, because coercing invents a name: ["cyber-dojo", "kosli-public"] would request the org cyber-dojo,kosli-public.
A few actions are not organization-scoped: get_user_default_org,
list_system_attestation_types, the four /schemas/... actions, and the five
*_personal_api_key(s) actions that manage the authenticated user's own API keys.
Passing an org to one of those is rejected rather than ignored.
An org your token cannot reach returns the usual error object with the API's
status, 403 for both a non-member and a non-existent org. Kosli staff accounts
can read any org, so a successful read does not prove a write would be allowed.
Both execute tools accept an optional fields array to request only specific top-level fields from each object in the response. This dramatically reduces response size and token usage:
{
"actionId": "get_snapshot_snapshots__org___env_name___snapshot_expression__get",
"params": { "env_name": "prod-aws", "snapshot_expression": "-1" },
"fields": ["name", "compliant", "fingerprint", "reasons_for_incompliance"]
}
Regenerate the catalog
src/catalog.json is committed and bundled into the build. Refresh it from the live OpenAPI spec with:
npm run generate-catalog
Development
npm test # run the test suite (vitest)
npm run test:watch # watch mode
npm run typecheck # type-check src, test and scripts
npm run build # compile to dist/
npm start # run the built server over stdio
npm run smoke # start the built server and drive it over stdio
npm run pack:mcpb # build a .mcpb bundle for Claude Desktop
npm run pack:mcpb:dev # same, versioned to install over the release in Claude Desktop
Layout
src/
index.ts # bin: builds a server and connects stdio
org.ts # which parameter is the org, shared by three places
server.ts # registers the three MCP tools
config.ts # env-var loading
types.ts # shared types (CatalogEntry, Config, …)
catalog.json # generated action catalog
client/kosli-client.ts
tools/search-actions.ts
tools/execute-action.ts
scripts/
generate-catalog.ts # fetches OpenAPI spec → catalog.json
test/ # vitest specs mirroring src/
Kosli MCP 질문
Kosli MCP server를 어떻게 설치하나요?
npm install 및 npm run build를 사용하여 npm으로 설치하거나, npx -y @kosli/mcp-server를 사용하여 직접 실행할 수 있습니다.
필수 설정 변수는 무엇인가요?
서버에는 KOSLI_API_TOKEN이 필요합니다. 또한 US 또는 EU와 같은 다른 환경을 가리키도록 KOSLI_BASE_URL을 선택적으로 설정할 수 있습니다.
쓰기 액션을 실행해도 안전한가요?
쓰기 액션은 실제 리소스를 생성, 수정 또는 삭제할 수 있습니다. 실수로 인한 변경을 방지하기 위해 MCP 클라이언트는 이러한 호출 시 승인 프롬프트를 통해 제한해야 합니다.