packagecloud MCP by usefulapi
Read packagecloud repos, packages, versions and download stats; create repos, promote and delete.
我該用這個嗎
品質與安全性
發現項目(5)
- LOW在 packagecloud_list_distributions 中
- LOW在 packagecloud_list_package_groups 中
- LOW在 packagecloud_list_package_versions 中
- LOW在 packagecloud_get_package_downloads 中
- LOW在 packagecloud_get_repository_installs 中
根據工具定義與協定合規性的自動化分析。
上下文成本
這是每次將伺服器的工具載入模型上下文時所消耗的約略 token 數量。數量越高,可用於其他工作的注意力就越少。
安裝
一鍵安裝
將以下內容加入你的 `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"
}社群
證據