Pugi
Passive website security checks, credit balance, card top-up links and published app status.
我該用這個嗎
品質與安全性
根據工具定義與協定合規性的自動化分析。
上下文成本
這是每次將伺服器的工具載入模型上下文時所消耗的約略 token 數量。數量越高,可用於其他工作的注意力就越少。
安裝
一鍵安裝
將以下內容加入你的 `claude_desktop_config.json` 檔案:
{
"mcpServers": {
"pugi": {
"url": "https://api.pugi.io/api/agent/v1/mcp"
}
}
}遠端端點
https://api.pugi.io/api/agent/v1/mcpstreamable-http它能做什麼
工具清單
工具(12)
🟢get_balance
Shows the credit balance of this account in USD, what this key spent today, its daily spend cap, and the price of each tool. Paid tools spend this balance; when it runs out, ask a person to add credit with buy_credits_link, or pay with add_credit (a business purchase).
輸入結構描述
{
"type": "object",
"properties": {},
"additionalProperties": false
}🟢buy_credits_link(amount_usd)
Returns a card checkout link for this account. A person opens it and pays there. This tool never charges anything by itself. Tax, where it applies, is added at checkout.
輸入結構描述
{
"type": "object",
"properties": {
"amount_usd": {
"type": "number",
"minimum": 1,
"maximum": 100,
"description": "How much credit to add. Rounded up to a pack of 5, 10, 25, 50 or 100 USD. Default 5."
}
},
"additionalProperties": false
}🟢scan_url(url)
A free, passive, read-only check of a public website: HTTPS and the redirect to it, five security headers, cookie flags, and the page's own scripts read for leaked keys. Returns a grade from A+ to F, counts by severity and the most serious finding. 10 checks a day per key. It is not a pentest and does not prove a site is secure.
輸入結構描述
{
"type": "object",
"properties": {
"url": {
"type": "string",
"description": "The public address to check, for example https://example.com",
"maxLength": 2048
}
},
"required": [
"url"
],
"additionalProperties": false
}⚪make_logo(business_name, industry, description, name, niche, ...)
Draws the same four whole logos as logo.pugi.io using its brief, concept planner and image inspection. Pass the user's description and style words verbatim, including unusual words; do not replace them with presets. Each logo includes a brand_kit_url opening that exact logo. Paid plans: included, up to 50 calls/day. Free accounts: three calls/day, then $0.25 per successful call. charged_usd and pricing_note report the price. Reuse idempotency_key for retries.
輸入結構描述
{
"type": "object",
"properties": {
"business_name": {
"type": "string",
"minLength": 1,
"maxLength": 60,
"description": "The business name, as written by the user."
},
"industry": {
"type": "string",
"maxLength": 300,
"description": "Optional. What the business does, for example \"coffee shop\" or \"accounting firm\"."
},
"description": {
"type": "string",
"maxLength": 400,
"description": "The user’s description verbatim, including location, imagery and mood."
},
"name": {
"type": "string",
"maxLength": 60
},
"niche": {
"type": "string",
"maxLength": 300
},
"tagline": {
"type": "string",
"maxLength": 200
},
"styles": {
"type": "array",
"maxItems": 20,
"items": {
"type": "string",
"maxLength": 400
},
"description": "The user’s style words verbatim."
},
"palette": {
"type": "string",
"maxLength": 100
},
"refines": {
"type": "array",
"maxItems": 20,
"items": {
"type": "string",
"maxLength": 400
}
},
"refine_notes": {
"type": "string",
"maxLength": 400
},
"colours": {
"description": "Optional. Hex colours: {\"primary\": \"#1e3a8a\", \"secondary\": \"#f59e0b\", \"text\": \"#111827\"}, or a list of one to three of them in that order.",
"oneOf": [
{
"type": "object",
"properties": {
"primary": {
"type": "string",
"pattern": "^#[0-9a-fA-F]{6}$"
},
"secondary": {
"type": "string",
"pattern": "^#[0-9a-fA-F]{6}$"
},
"text": {
"type": "string",
"pattern": "^#[0-9a-fA-F]{6}$"
}
},
"required": [
"primary"
],
"additionalProperties": false
},
{
"type": "array",
"minItems": 1,
"maxItems": 3,
"items": {
"type": "string",
"pattern": "^#[0-9a-fA-F]{6}$"
}
}
]
},
"style": {
"type": "string",
"maxLength": 400,
"description": "Style words verbatim; styles also accepts a list."
},
"idempotency_key": {
"type": "string",
"minLength": 8,
"maxLength": 128,
"pattern": "^[A-Za-z0-9._:-]{8,128}$",
"description": "A unique string for this call, reused only to retry it. The same key with the same arguments is never charged twice."
}
},
"required": [
"idempotency_key"
],
"anyOf": [
{
"required": [
"business_name"
]
},
{
"required": [
"name"
]
}
],
"additionalProperties": false
}🟢publish_status(project_id)
Lists the apps this account has published, newest first, with their status and live address. Pass project_id to see one project.
輸入結構描述
{
"type": "object",
"properties": {
"project_id": {
"type": "string",
"maxLength": 200,
"description": "Optional project id."
}
},
"additionalProperties": false
}🟢catalog_search(query, tags, category, limit)
Free. Searches the public Pugi catalogue of published sites and apps people built with Pugi. Filter by words in the title or description, tags (a card must carry all of them) and one category. Each result has a title, a short description, tags, a preview image, its public page on pugi.io and a start_from_this_url: the Pugi console with a brief for a new project like it (a person signs in there; it does not copy the code).
輸入結構描述
{
"type": "object",
"properties": {
"query": {
"type": "string",
"maxLength": 80,
"description": "Optional words to find in the title or description, for example \"booking\"."
},
"tags": {
"type": "array",
"maxItems": 8,
"items": {
"type": "string",
"maxLength": 24
},
"description": "Optional tags; a card must carry every one, for example [\"saas\"]."
},
"category": {
"type": "string",
"enum": [
"portfolio",
"landing_page",
"blog",
"editorial",
"ecommerce",
"events",
"music",
"resume",
"services",
"lifestyle",
"saas",
"dashboards",
"internal_tools",
"developer_tools",
"business_tools",
"productivity",
"project_management",
"product_management",
"finance",
"education",
"real_estate",
"food",
"beauty_wellness",
"fitness",
"travel",
"health",
"nonprofit",
"agency",
"local_business",
"other"
],
"description": "Optional category."
},
"limit": {
"type": "integer",
"minimum": 1,
"maximum": 20,
"description": "How many cards to return. Default 10."
}
},
"additionalProperties": false
}🟢scan_repo(repo_url, ref, idempotency_key)
Checks a public GitHub repository branch for leaked secrets, vulnerable or malicious dependencies and risky code, and returns each finding with its severity, rule, file and line (or package) and a short fix hint, plus a summary. No code is run. $1 from prepaid credit, charged only when the check finishes; a failed check costs nothing. Pass an idempotency_key: a check can take a few minutes, and when the answer is state "running", call again with the same idempotency_key and repo_url to collect the result (never charged twice). Private repositories, other hosts, tags and commit SHAs are not supported yet; repositories up to 50 MB.
輸入結構描述
{
"type": "object",
"properties": {
"repo_url": {
"type": "string",
"maxLength": 300,
"description": "A public GitHub repository, for example https://github.com/owner/repo"
},
"ref": {
"type": "string",
"maxLength": 240,
"description": "Optional branch name. Default: the repository's default branch."
},
"idempotency_key": {
"type": "string",
"minLength": 8,
"maxLength": 128,
"pattern": "^[A-Za-z0-9._:-]{8,128}$",
"description": "A unique string naming this check. Reuse it to collect the result or to retry; the same key is never charged twice."
}
},
"required": [
"repo_url",
"idempotency_key"
],
"additionalProperties": false
}⚪build_app(logo_id, brandHandoffId, pick, theme, locale, ...)
App builds require application security verification and must be started in the Pugi console. This tool returns app_builds_in_console without charging.
輸入結構描述
{
"type": "object",
"properties": {
"logo_id": {
"type": "string",
"description": "Selected logo_id returned by make_logo."
},
"brandHandoffId": {
"type": "string",
"description": "BrandHandoff from logo.pugi.io."
},
"pick": {
"type": "string",
"description": "Console gallery starter slug."
},
"theme": {
"type": "string",
"description": "Console theme slug."
},
"locale": {
"type": "string",
"description": "Site language."
},
"brief": {
"type": "string",
"minLength": 10,
"maxLength": 8000
},
"max_usd": {
"type": "number",
"minimum": 1,
"maximum": 25,
"default": 5
},
"idempotency_key": {
"type": "string",
"minLength": 8,
"maxLength": 128,
"pattern": "^[A-Za-z0-9._:-]{8,128}$"
}
},
"required": [
"brief",
"idempotency_key"
],
"additionalProperties": false
}🟢build_site(logo_id, brandHandoffId, pick, theme, locale, ...)
Builds a website from a brief in a Pugi workspace and returns a job_id. Billed by usage, never above max_usd (default 5, from 1 to 25 USD). max_usd is reserved from your credit before the build starts and the unused part is released when it ends; a build that produces nothing costs nothing. The answer includes estimate_usd_range from recent builds. A build takes several minutes: the call waits up to 50 seconds, then answers state "running"; call job_status with the job_id until it is finished, review the site with the view-only preview_url, then call publish. One build at a time per account.
輸入結構描述
{
"type": "object",
"properties": {
"logo_id": {
"type": "string",
"description": "Selected logo_id returned by make_logo."
},
"brandHandoffId": {
"type": "string",
"description": "BrandHandoff from logo.pugi.io."
},
"pick": {
"type": "string",
"description": "Console gallery starter slug."
},
"theme": {
"type": "string",
"description": "Console theme slug."
},
"locale": {
"type": "string",
"description": "Site language."
},
"brief": {
"type": "string",
"minLength": 10,
"maxLength": 8000,
"description": "What the site is for, who it is for, the pages and sections it needs, and any texts, colours or style it should use."
},
"max_usd": {
"type": "number",
"minimum": 1,
"maximum": 25,
"description": "The most this build may cost, in USD. Default 5. You pay the actual cost, usually less."
},
"idempotency_key": {
"type": "string",
"minLength": 8,
"maxLength": 128,
"pattern": "^[A-Za-z0-9._:-]{8,128}$",
"description": "A unique string naming this job. The same key returns the same job and is never charged twice."
}
},
"required": [
"brief",
"idempotency_key"
],
"additionalProperties": false
}🟡edit(logo_id, brandHandoffId, pick, theme, locale, ...)
Makes one change in the workspace of a site this account built with build_site and returns a job_id. App edits must be made in the Pugi console. Billed by usage, never above max_usd (default 2, from 0.5 to 25 USD); a change that touches nothing costs nothing. Follow it with job_status like a build.
輸入結構描述
{
"type": "object",
"properties": {
"logo_id": {
"type": "string",
"description": "Selected logo_id returned by make_logo."
},
"brandHandoffId": {
"type": "string",
"description": "BrandHandoff from logo.pugi.io."
},
"pick": {
"type": "string",
"description": "Console gallery starter slug."
},
"theme": {
"type": "string",
"description": "Console theme slug."
},
"locale": {
"type": "string",
"description": "Site language."
},
"job_id": {
"type": "string",
"description": "The job_id of the build (or of an earlier edit) of the site to change."
},
"project_id": {
"type": "string",
"description": "Or the project_id of that site."
},
"instruction": {
"type": "string",
"minLength": 10,
"maxLength": 8000,
"description": "The change to make, in plain words."
},
"max_usd": {
"type": "number",
"minimum": 0.5,
"maximum": 25,
"description": "The most this change may cost, in USD. Default 2."
},
"idempotency_key": {
"type": "string",
"minLength": 8,
"maxLength": 128,
"pattern": "^[A-Za-z0-9._:-]{8,128}$",
"description": "A unique string naming this job. The same key returns the same job and is never charged twice."
}
},
"required": [
"instruction",
"idempotency_key"
],
"additionalProperties": false
}🟢job_status(job_id)
Free. The state of a build_site, build_app or edit job: running, finished, stopped (at its spending limit, what was built is kept) or failed; a short progress line; charged_usd so far (final once the job ends); and, when it is built, a view-only preview_url that only shows the site and expires after 15 minutes (call again for a fresh one).
輸入結構描述
{
"type": "object",
"properties": {
"job_id": {
"type": "string",
"description": "The job_id build_site, build_app or edit returned."
}
},
"required": [
"job_id"
],
"additionalProperties": false
}🟡publish(job_id, project_id, idempotency_key)
Free. Puts a site this account built live on its pugi.app address, after the same security check of the exact code every Pugi publish runs. The account's hosting rules apply (the number of live apps it may have). Answers the live url, or status "building" while the address comes up (then use publish_status).
輸入結構描述
{
"type": "object",
"properties": {
"job_id": {
"type": "string",
"description": "The job_id of the build (or the latest edit) to publish."
},
"project_id": {
"type": "string",
"description": "Or the project_id of that site."
},
"idempotency_key": {
"type": "string",
"minLength": 8,
"maxLength": 128,
"pattern": "^[A-Za-z0-9._:-]{8,128}$",
"description": "Optional. Reuse it to retry the same publish."
}
},
"additionalProperties": false
}社群
證據