AttachPage

Publish webpages and documents, send private review links, and collect comments and approvals.

Should I use this

Quality & Safety

A
Description quality
100%
Schema completeness
73%
Naming quality
98%
Poisoning risk
100%
Permission match
100%
Protocol compliance
100%

Based on automated analysis of tool definitions and protocol compliance.

Context Cost

~1,454Tokens (tool definitions)
~717 BTypical response size
Moderate attention impact (1.14% of 128k context)

This is the approximate number of tokens consumed each time the server's tools are loaded into a model's context. Higher counts reduce the attention available for other tasks.

Install

One-Click Install

Add this to your `claude_desktop_config.json` file:

{
  "mcpServers": {
    "attachpage": {
      "url": "https://attachpage.com/mcp"
    }
  }
}

Remote endpoints

https://attachpage.com/mcpstreamable-http

What it can do

Tool inventory

Tools (11)

🟢 Read-only🟡 Write🔴 Delete⚪ Unknown
🔴publish_document(filename, content, siteId, siteName, slug, ...)

Publish a PDF, Word (.docx), PowerPoint (.pptx), Excel (.xlsx/.xls), or CSV file as a browser-viewable page, private by default. Accepts filename and base64 content, up to 4 MB decoded. Documents become readable PDFs, slides have presentation controls, and spreadsheets have searchable sheet tabs. Preserves the original for download. A siteId replaces the page at the same address. Does not send invitations.

Input Schema

{
  "type": "object",
  "properties": {
    "filename": {
      "type": "string"
    },
    "content": {
      "type": "string",
      "description": "Base64 file bytes, not a local path or URL."
    },
    "siteId": {
      "type": "string"
    },
    "siteName": {
      "type": "string"
    },
    "slug": {
      "type": "string"
    },
    "visibility": {
      "type": "string",
      "enum": [
        "private",
        "public"
      ]
    }
  },
  "required": [
    "filename",
    "content"
  ]
}
🟢get_profile

Identify the AttachPage account connected to this agent.

Input Schema

{
  "type": "object",
  "properties": {}
}

Output Schema

{
  "type": "object",
  "properties": {
    "id": {
      "type": "string"
    },
    "name": {
      "type": "string"
    },
    "email": {
      "type": "string"
    }
  },
  "required": [
    "id"
  ],
  "additionalProperties": false
}
🟡publish_anonymous_page(siteName, slug, files)

Publish a public web page without an account or API key. It expires in 48 hours. Returns the page URL and a personal claimUrl; opening that link while signed in makes the page permanent.

Input Schema

{
  "type": "object",
  "properties": {
    "siteName": {
      "type": "string"
    },
    "slug": {
      "type": "string"
    },
    "files": {
      "type": "array",
      "description": "Files of the page. The complete resulting page includes index.html at the top level.",
      "items": {
        "type": "object",
        "required": [
          "path",
          "content"
        ],
        "properties": {
          "path": {
            "type": "string"
          },
          "content": {
            "type": "string"
          },
          "encoding": {
            "type": "string",
            "enum": [
              "utf8",
              "base64"
            ]
          }
        }
      }
    }
  },
  "required": [
    "files"
  ]
}
🔴publish_page(siteId, siteName, slug, visibility, files, ...)

Publish a web page as the connected user. A siteId replaces an existing page at the same address. preserveFiles retains omitted assets and requires the baseDeploymentId of that version; stale edits are refused. Visibility is private (invitation-only, default) or public. Requires an authenticated AttachPage connection.

Input Schema

{
  "type": "object",
  "properties": {
    "siteId": {
      "type": "string"
    },
    "siteName": {
      "type": "string"
    },
    "slug": {
      "type": "string"
    },
    "visibility": {
      "type": "string",
      "enum": [
        "private",
        "public"
      ]
    },
    "files": {
      "type": "array",
      "description": "Files of the page. The complete resulting page includes index.html at the top level.",
      "items": {
        "type": "object",
        "required": [
          "path",
          "content"
        ],
        "properties": {
          "path": {
            "type": "string"
          },
          "content": {
            "type": "string"
          },
          "encoding": {
            "type": "string",
            "enum": [
              "utf8",
              "base64"
            ]
          }
        }
      }
    },
    "preserveFiles": {
      "type": "boolean",
      "description": "Retain files not included in this edit. Requires siteId and baseDeploymentId."
    },
    "baseDeploymentId": {
      "type": "string",
      "description": "Expected current version. A changed page is refused rather than overwritten."
    }
  },
  "required": [
    "files"
  ]
}
🔴send_page(siteId, recipients, message, expiresInDays)

Email personal invitations for a page to the specified recipient addresses, with an optional message and access expiry. Sends email immediately; sent email cannot be recalled.

Input Schema

{
  "type": "object",
  "properties": {
    "siteId": {
      "type": "string"
    },
    "recipients": {
      "type": "array",
      "items": {
        "type": "string"
      }
    },
    "message": {
      "type": "string"
    },
    "expiresInDays": {
      "type": "integer"
    }
  },
  "required": [
    "siteId",
    "recipients"
  ]
}
🟢list_pages

List the user's pages with recipient and open counts.

Input Schema

{
  "type": "object",
  "properties": {}
}
🟢get_page(siteId, filePaths)

Details for one page: address, visibility, recipients and who opened it. Optional filePaths reads exact uploaded source files from that version, up to 20 files and 256 KB total, with text or base64 encoding. An empty filePaths array returns a bounded manifest without file contents.

Input Schema

{
  "type": "object",
  "properties": {
    "siteId": {
      "type": "string"
    },
    "filePaths": {
      "type": "array",
      "maxItems": 20,
      "items": {
        "type": "string"
      }
    }
  },
  "required": [
    "siteId"
  ]
}
🔴update_page(siteId, name, slug, visibility)

Rename a page, change its address label (slug), or switch private/public.

Input Schema

{
  "type": "object",
  "properties": {
    "siteId": {
      "type": "string"
    },
    "name": {
      "type": "string"
    },
    "slug": {
      "type": "string"
    },
    "visibility": {
      "type": "string",
      "enum": [
        "private",
        "public"
      ]
    }
  },
  "required": [
    "siteId"
  ]
}
🟢get_feedback(siteId, status)

Read recipient comments, page paths, pointed-at elements (selector and visible text), and approval or change-request decisions. The status filter selects open, resolved, or all feedback.

Input Schema

{
  "type": "object",
  "properties": {
    "siteId": {
      "type": "string"
    },
    "status": {
      "type": "string",
      "enum": [
        "open",
        "resolved",
        "all"
      ]
    }
  },
  "required": [
    "siteId"
  ]
}
🔴resolve_feedback(feedbackId, resolved)

Mark recipient feedback as resolved, or reopen it with resolved: false. The recipient sees the updated resolution status.

Input Schema

{
  "type": "object",
  "properties": {
    "feedbackId": {
      "type": "string"
    },
    "resolved": {
      "type": "boolean"
    }
  },
  "required": [
    "feedbackId"
  ]
}
🔴notify_recipients(siteId, note)

Email existing active recipients that a page has been updated, with an optional note. Each recipient receives a fresh personal link. Sends email immediately; sent email cannot be recalled.

Input Schema

{
  "type": "object",
  "properties": {
    "siteId": {
      "type": "string"
    },
    "note": {
      "type": "string"
    }
  },
  "required": [
    "siteId"
  ]
}

Community

Rate this Server

Evidence

Recent observations

verifiedversion not recorded11 tools