packagecloud MCP by usefulapi

Read packagecloud repos, packages, versions and download stats; create repos, promote and delete.

사용해야 할까요

품질 및 안전성

A
설명 품질
100%
스키마 완전성
96%
이름 품질
74%
오염 위험
100%
권한 일치
100%
프로토콜 준수
100%

발견 사항 (5)

  • LOWTool 'packagecloud_list_distributions' name length outside 3-30 rangepackagecloud_list_distributions에서
  • LOWTool 'packagecloud_list_package_groups' name length outside 3-30 rangepackagecloud_list_package_groups에서
  • LOWTool 'packagecloud_list_package_versions' name length outside 3-30 rangepackagecloud_list_package_versions에서
  • LOWTool 'packagecloud_get_package_downloads' name length outside 3-30 rangepackagecloud_get_package_downloads에서
  • LOWTool 'packagecloud_get_repository_installs' name length outside 3-30 rangepackagecloud_get_repository_installs에서

도구 정의와 프로토콜 준수에 대한 자동 분석을 기반으로 합니다.

컨텍스트 비용

~4,741토큰 (도구 정의)
~1.8 KB일반적인 응답 크기
상당한 주의 영향 (128k 컨텍스트의 3.70%)

이는 서버의 도구가 모델의 컨텍스트에 로드될 때마다 소비되는 대략적인 토큰 수입니다. 수치가 높을수록 다른 작업에 사용할 수 있는 주의가 줄어듭니다.

설치

원클릭 설치

`claude_desktop_config.json` 파일에 다음을 추가하세요:

{
  "mcpServers": {
    "packagecloud": {
      "url": "https://packagecloud.usefulapi.io/mcp"
    }
  }
}

원격 엔드포인트

https://packagecloud.usefulapi.io/mcpstreamable-http

할 수 있는 일

도구 목록

도구 (18)

🟢 읽기 전용🟡 쓰기🔴 삭제⚪ 알 수 없음
🟢packagecloud_list_repositories(include_collaborations, page, per_page)

List the package repositories of this account: name, fqname (user/repo, used by every other tool), privacy, package count and last push. include_collaborations adds repositories you collaborate on. GET /repos.

입력 스키마

{
  "type": "object",
  "properties": {
    "include_collaborations": {
      "description": "Also list repositories that belong to other accounts but that you collaborate on.",
      "type": "boolean"
    },
    "page": {
      "description": "Page number, from 1 (default 1). Pass the previous reply's next_page.",
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 100000
    },
    "per_page": {
      "description": "Results per page (default 30; the server caps it at its own Max-Per-Page).",
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 100
    }
  },
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢packagecloud_get_repository(repository)

One repository: name, fqname, url, privacy, package count and last push. GET /repos/{user}/{repo}.

입력 스키마

{
  "type": "object",
  "properties": {
    "repository": {
      "type": "string",
      "minLength": 3,
      "maxLength": 201,
      "description": "The repository as \"user/repo\" (the fqname returned by packagecloud_list_repositories)."
    }
  },
  "required": [
    "repository"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟡packagecloud_create_repository(name, private)

WRITE: create a new, empty package repository in this account (the plan limits how many private ones). Returns the URL of the new repository. POST /repos.

입력 스키마

{
  "type": "object",
  "properties": {
    "name": {
      "type": "string",
      "pattern": "^[A-Za-z0-9][A-Za-z0-9._-]{0,99}$",
      "description": "The new repository name."
    },
    "private": {
      "default": true,
      "description": "Create a private repository (default true) or a public one.",
      "type": "boolean"
    }
  },
  "required": [
    "name"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢packagecloud_list_distributions

The Linux distributions and versions packagecloud supports for deb, dsc and rpm packages, with their index_name (for example ubuntu / jammy) and numeric version ids. GET /distributions.

입력 스키마

{
  "type": "object",
  "properties": {},
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢packagecloud_list_packages(repository, page, per_page)

List every package file in a repository (not grouped), newest data first as the server orders it. Each item carries ready-made URLs: package_url, versions_url, downloads_*_url, promote_url, destroy_url and download_url; pass those to the other package tools. Paged. GET /repos/{user}/{repo}/packages.json.

입력 스키마

{
  "type": "object",
  "properties": {
    "repository": {
      "type": "string",
      "minLength": 3,
      "maxLength": 201,
      "description": "The repository as \"user/repo\" (the fqname returned by packagecloud_list_repositories)."
    },
    "page": {
      "description": "Page number, from 1 (default 1). Pass the previous reply's next_page.",
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 100000
    },
    "per_page": {
      "description": "Results per page (default 30; the server caps it at its own Max-Per-Page).",
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 100
    }
  },
  "required": [
    "repository"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢packagecloud_search_packages(repository, q, filter, dist, arch, ...)

Search a repository by package file name. An empty q returns every package. filter limits by type (rpms, debs, dscs, gem, python, node); dist (for example ubuntu or el/6) overrides filter; arch applies to Alpine/RPM/Debian only. Items carry the same ready-made URLs as list_packages. Paged. GET /repos/{user}/{repo}/search.json.

입력 스키마

{
  "type": "object",
  "properties": {
    "repository": {
      "type": "string",
      "minLength": 3,
      "maxLength": 201,
      "description": "The repository as \"user/repo\" (the fqname returned by packagecloud_list_repositories)."
    },
    "q": {
      "default": "",
      "description": "Part of the package file name; empty returns all packages.",
      "type": "string",
      "maxLength": 200
    },
    "filter": {
      "description": "Package type: rpms, debs, dscs, gem, python or node. Ignored when dist is given.",
      "type": "string",
      "pattern": "^[A-Za-z]{2,12}$"
    },
    "dist": {
      "description": "Distribution, for example ubuntu or el/6.",
      "type": "string",
      "pattern": "^[A-Za-z0-9._/-]{1,64}$"
    },
    "arch": {
      "description": "Architecture, for example x86_64, arm64 or amd64.",
      "type": "string",
      "pattern": "^[A-Za-z0-9_-]{1,32}$"
    },
    "page": {
      "description": "Page number, from 1 (default 1). Pass the previous reply's next_page.",
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 100000
    },
    "per_page": {
      "description": "Results per page (default 30; the server caps it at its own Max-Per-Page).",
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 100
    }
  },
  "required": [
    "repository"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢packagecloud_list_package_groups(repository, type, distro, version, arch, ...)

List the packages of one type, grouped by name with a versions_count and a versions_url (pass that to packagecloud_list_package_versions). Narrow by distro, then version, then arch (each needs the previous one; '*' matches any). Examples: type rpm; type deb + distro ubuntu + version jammy + arch amd64; type gem. GET /repos/{user}/{repo}/packages/{type}[/{distro}[/{version}[/{arch}]]].json.

입력 스키마

{
  "type": "object",
  "properties": {
    "repository": {
      "type": "string",
      "minLength": 3,
      "maxLength": 201,
      "description": "The repository as \"user/repo\" (the fqname returned by packagecloud_list_repositories)."
    },
    "type": {
      "type": "string",
      "pattern": "^[a-z]{2,12}$",
      "description": "Package type: deb, rpm, gem, python, node, java, helm, alpine ..."
    },
    "distro": {
      "description": "Distribution name, for example ubuntu or el.",
      "type": "string",
      "pattern": "^[A-Za-z0-9*._-]{1,64}$"
    },
    "version": {
      "description": "Distribution version name, for example jammy or 7.",
      "type": "string",
      "pattern": "^[A-Za-z0-9*._-]{1,64}$"
    },
    "arch": {
      "description": "Architecture, for example amd64 or x86_64.",
      "type": "string",
      "pattern": "^[A-Za-z0-9*._-]{1,64}$"
    },
    "page": {
      "description": "Page number, from 1 (default 1). Pass the previous reply's next_page.",
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 100000
    },
    "per_page": {
      "description": "Results per page (default 30; the server caps it at its own Max-Per-Page).",
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 100
    }
  },
  "required": [
    "repository",
    "type"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢packagecloud_get_package(package_url)

Details of one package file (size, checksums, dependencies, licenses, download counts and its other URLs). Pass the package_url of an item from list_packages, search_packages or list_package_versions. GET {package_url}.

입력 스키마

{
  "type": "object",
  "properties": {
    "package_url": {
      "type": "string",
      "minLength": 10,
      "maxLength": 1000,
      "description": "The package_url of a package object, exactly as returned by the API (a /api/v1/repos/... path)."
    }
  },
  "required": [
    "package_url"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢packagecloud_list_package_versions(versions_url, page, per_page)

All versions of one package name (for deb/rpm: per distro, version and architecture). Pass the versions_url of an item from list_package_groups, or derive it from a package object. Paged. GET {versions_url}.

입력 스키마

{
  "type": "object",
  "properties": {
    "versions_url": {
      "type": "string",
      "minLength": 10,
      "maxLength": 1000,
      "description": "The versions_url of a package object, exactly as returned by the API (a /api/v1/repos/... path)."
    },
    "page": {
      "description": "Page number, from 1 (default 1). Pass the previous reply's next_page.",
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 100000
    },
    "per_page": {
      "description": "Results per page (default 30; the server caps it at its own Max-Per-Page).",
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 100
    }
  },
  "required": [
    "versions_url"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢packagecloud_get_package_downloads(package_url, kind, interval, start_date, end_date, ...)

Download statistics of one package version: a count, a time series, or (repository owners only) the detail of each download. Default range is the last 7 days; pass start_date=19700101Z for all time. Pass the package_url of the package; Java and generic files have no download stats. GET {package_url minus .json}/stats/downloads/{count|detail|series/<interval>}.json.

입력 스키마

{
  "type": "object",
  "properties": {
    "package_url": {
      "type": "string",
      "minLength": 10,
      "maxLength": 1000,
      "description": "The package_url of a package object, exactly as returned by the API (a /api/v1/repos/... path)."
    },
    "kind": {
      "default": "count",
      "description": "count = total, series = per interval, detail = one record per download (owners only).",
      "type": "string",
      "enum": [
        "count",
        "series",
        "detail"
      ]
    },
    "interval": {
      "default": "daily",
      "description": "Series interval, \"daily\" (default) or \"weekly\".",
      "type": "string",
      "pattern": "^[a-z]{3,10}$"
    },
    "start_date": {
      "type": "string",
      "pattern": "^\\d{8}Z?$|^\\d{4}-\\d{2}-\\d{2}(T[0-9:.]{2,12})?Z?$",
      "description": "An ISO 8601 date, for example 20260101Z or 2026-01-01."
    },
    "end_date": {
      "type": "string",
      "pattern": "^\\d{8}Z?$|^\\d{4}-\\d{2}-\\d{2}(T[0-9:.]{2,12})?Z?$",
      "description": "An ISO 8601 date, for example 20260101Z or 2026-01-01."
    },
    "source": {
      "description": "Only downloads from the \"web\" or the \"cli\".",
      "type": "string",
      "enum": [
        "web",
        "cli"
      ]
    },
    "user_agent": {
      "description": "Only downloads whose user agent equals this.",
      "type": "string",
      "minLength": 1,
      "maxLength": 200
    },
    "page": {
      "description": "Page number, from 1 (default 1). Pass the previous reply's next_page.",
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 100000
    },
    "per_page": {
      "description": "Results per page (default 30; the server caps it at its own Max-Per-Page).",
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 100
    }
  },
  "required": [
    "package_url"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢packagecloud_get_repository_installs(repository, kind, interval, distro, version, ...)

How often a repository was installed (set up on a machine): a count, a time series, or (owners only) the detail of each install, optionally for one distro or distro+version. Default range is the last 7 days; pass start_date=19700101Z for all time. GET /repos/{user}/{repo}/stats/installs[/{distro}[/{version}]]/{count|detail|series/<interval>}.json.

입력 스키마

{
  "type": "object",
  "properties": {
    "repository": {
      "type": "string",
      "minLength": 3,
      "maxLength": 201,
      "description": "The repository as \"user/repo\" (the fqname returned by packagecloud_list_repositories)."
    },
    "kind": {
      "default": "count",
      "description": "count = total, series = per interval, detail = one record per install (owners only; includes host names and IP addresses).",
      "type": "string",
      "enum": [
        "count",
        "series",
        "detail"
      ]
    },
    "interval": {
      "default": "daily",
      "description": "Series interval, \"daily\" (default) or \"weekly\".",
      "type": "string",
      "pattern": "^[a-z]{3,10}$"
    },
    "distro": {
      "description": "Only installs on this distribution, for example ubuntu.",
      "type": "string",
      "pattern": "^[A-Za-z0-9*._-]{1,64}$"
    },
    "version": {
      "description": "Only installs on this distribution version, for example jammy (needs distro).",
      "type": "string",
      "pattern": "^[A-Za-z0-9*._-]{1,64}$"
    },
    "start_date": {
      "type": "string",
      "pattern": "^\\d{8}Z?$|^\\d{4}-\\d{2}-\\d{2}(T[0-9:.]{2,12})?Z?$",
      "description": "An ISO 8601 date, for example 20260101Z or 2026-01-01."
    },
    "end_date": {
      "type": "string",
      "pattern": "^\\d{8}Z?$|^\\d{4}-\\d{2}-\\d{2}(T[0-9:.]{2,12})?Z?$",
      "description": "An ISO 8601 date, for example 20260101Z or 2026-01-01."
    },
    "user_agent": {
      "description": "Only downloads whose user agent equals this.",
      "type": "string",
      "minLength": 1,
      "maxLength": 200
    },
    "page": {
      "description": "Page number, from 1 (default 1). Pass the previous reply's next_page.",
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 100000
    },
    "per_page": {
      "description": "Results per page (default 30; the server caps it at its own Max-Per-Page).",
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 100
    }
  },
  "required": [
    "repository"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢packagecloud_list_gpg_keys(repository)

The GPG keys of a repository (repository signing keys and package signing keys): name, fingerprint, type and the public key download URL. GET /repos/{user}/{repo}/gpg_keys.json.

입력 스키마

{
  "type": "object",
  "properties": {
    "repository": {
      "type": "string",
      "minLength": 3,
      "maxLength": 201,
      "description": "The repository as \"user/repo\" (the fqname returned by packagecloud_list_repositories)."
    }
  },
  "required": [
    "repository"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢packagecloud_get_gpg_key(repository, key_name)

One GPG key of a repository by its key name (as returned by list_gpg_keys, for example user-repo-85D7FBF915DFCBC6.pub.gpg). GET /repos/{user}/{repo}/gpg_keys/{keyname}.json.

입력 스키마

{
  "type": "object",
  "properties": {
    "repository": {
      "type": "string",
      "minLength": 3,
      "maxLength": 201,
      "description": "The repository as \"user/repo\" (the fqname returned by packagecloud_list_repositories)."
    },
    "key_name": {
      "type": "string",
      "minLength": 1,
      "maxLength": 200,
      "description": "The GPG key name."
    }
  },
  "required": [
    "repository",
    "key_name"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢packagecloud_get_readme(repository)

The Markdown README of a repository. GET /repos/{user}/{repo}/readme.json.

입력 스키마

{
  "type": "object",
  "properties": {
    "repository": {
      "type": "string",
      "minLength": 3,
      "maxLength": 201,
      "description": "The repository as \"user/repo\" (the fqname returned by packagecloud_list_repositories)."
    }
  },
  "required": [
    "repository"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟡packagecloud_create_readme(repository, body)

WRITE: create the Markdown README of a repository. Use append_readme to add to an existing one. POST /repos/{user}/{repo}/readme.json.

입력 스키마

{
  "type": "object",
  "properties": {
    "repository": {
      "type": "string",
      "minLength": 3,
      "maxLength": 201,
      "description": "The repository as \"user/repo\" (the fqname returned by packagecloud_list_repositories)."
    },
    "body": {
      "type": "string",
      "minLength": 1,
      "maxLength": 100000,
      "description": "The README, as Markdown."
    }
  },
  "required": [
    "repository",
    "body"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟡packagecloud_append_readme(repository, body)

WRITE: append Markdown to the existing README of a repository (existing text is kept). Not idempotent: calling it twice appends twice. PATCH /repos/{user}/{repo}/readme.json.

입력 스키마

{
  "type": "object",
  "properties": {
    "repository": {
      "type": "string",
      "minLength": 3,
      "maxLength": 201,
      "description": "The repository as \"user/repo\" (the fqname returned by packagecloud_list_repositories)."
    },
    "body": {
      "type": "string",
      "minLength": 1,
      "maxLength": 100000,
      "description": "Markdown to append to the README."
    }
  },
  "required": [
    "repository",
    "body"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🔴packagecloud_promote_package(promote_url, destination, scope)

WRITE, DESTRUCTIVE: MOVE a package file to another repository (for example staging -> production). It no longer exists in the source repository afterwards, and its download statistics are cleared. Pass the promote_url of the package object and the destination as user/repo. POST {promote_url}.

입력 스키마

{
  "type": "object",
  "properties": {
    "promote_url": {
      "type": "string",
      "minLength": 10,
      "maxLength": 1000,
      "description": "The promote_url of a package object, exactly as returned by the API (a /api/v1/repos/... path)."
    },
    "destination": {
      "type": "string",
      "minLength": 3,
      "maxLength": 201,
      "description": "The destination repository as \"user/repo\" (it must already exist)."
    },
    "scope": {
      "description": "Only for a scoped Node.js package: the scope including the @, for example @example.",
      "type": "string",
      "pattern": "^@[A-Za-z0-9._-]{1,100}$"
    }
  },
  "required": [
    "promote_url",
    "destination"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🔴packagecloud_delete_package(destroy_url, confirm_filename, scope)

WRITE, DESTRUCTIVE AND IRREVERSIBLE: delete one package file from its repository (a gem is yanked). Clients that depend on it will break. Pass the destroy_url of the package object and repeat its file name (the last path segment, for example jake-1.0-2.el6.x86_64.rpm) as confirm_filename. DELETE {destroy_url}.

입력 스키마

{
  "type": "object",
  "properties": {
    "destroy_url": {
      "type": "string",
      "minLength": 10,
      "maxLength": 1000,
      "description": "The destroy_url of a package object, exactly as returned by the API (a /api/v1/repos/... path)."
    },
    "confirm_filename": {
      "type": "string",
      "minLength": 1,
      "maxLength": 300,
      "description": "The package file name, exactly as in the last segment of destroy_url (the 'filename' field of the package)."
    },
    "scope": {
      "description": "Only for a scoped Node.js package: the scope including the @, for example @example.",
      "type": "string",
      "pattern": "^@[A-Za-z0-9._-]{1,100}$"
    }
  },
  "required": [
    "destroy_url",
    "confirm_filename"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}

커뮤니티

이 서버 평가하기

증거

최근 관측

검증됨버전이 기록되지 않음도구 18개