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 range在 packagecloud_list_distributions 中
  • LOWTool 'packagecloud_list_package_groups' name length outside 3-30 range在 packagecloud_list_package_groups 中
  • LOWTool 'packagecloud_list_package_versions' name length outside 3-30 range在 packagecloud_list_package_versions 中
  • LOWTool 'packagecloud_get_package_downloads' name length outside 3-30 range在 packagecloud_get_package_downloads 中
  • LOWTool 'packagecloud_get_repository_installs' name length outside 3-30 range在 packagecloud_get_repository_installs 中

根據工具定義與協定合規性的自動化分析。

上下文成本

~4,741Token(工具定義)
~1.8 KB典型回應大小
顯著的注意力影響(128k 上下文的 3.70%)

這是每次將伺服器的工具載入模型上下文時所消耗的約略 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"
}

社群

為此伺服器評分

證據

近期觀測

已驗證未記錄版本18 個工具