From 580c218b8265c0f23d25169c9a256072dc09cd59 Mon Sep 17 00:00:00 2001 From: Ryan Malloy Date: Sun, 11 Jan 2026 14:28:04 -0700 Subject: [PATCH] Add hosted MCP connection docs and photorealistic stapler hero - Add how-to/hosted-mcp.mdx with connection instructions for: - Claude Code quick connect - MCP Settings JSON config - Python SDK example - Self-hosting with Docker - Add swingline-hero.png (photorealistic red Swingline) - Add red-swingline.svg for alternate use - Update hero image to use photorealistic stapler - Add "Connect to Hosted Server" to sidebar with "New" badge --- astro.config.mjs | 1 + src/assets/red-swingline.svg | 38 ++++++ src/assets/swingline-hero.png | Bin 0 -> 30031 bytes src/content/docs/how-to/hosted-mcp.mdx | 178 +++++++++++++++++++++++++ src/content/docs/index.mdx | 3 +- 5 files changed, 219 insertions(+), 1 deletion(-) create mode 100644 src/assets/red-swingline.svg create mode 100644 src/assets/swingline-hero.png create mode 100644 src/content/docs/how-to/hosted-mcp.mdx diff --git a/astro.config.mjs b/astro.config.mjs index 6a47186..3f7b3b2 100644 --- a/astro.config.mjs +++ b/astro.config.mjs @@ -57,6 +57,7 @@ export default defineConfig({ label: 'How-To Guides', badge: { text: 'Solve', variant: 'note' }, items: [ + { label: 'Connect to Hosted Server', slug: 'how-to/hosted-mcp', badge: { text: 'New', variant: 'success' } }, { label: 'Extract Tables from Word', slug: 'how-to/extract-tables' }, { label: 'Analyze Excel Data', slug: 'how-to/analyze-excel' }, { label: 'Convert to Markdown', slug: 'how-to/convert-markdown' }, diff --git a/src/assets/red-swingline.svg b/src/assets/red-swingline.svg new file mode 100644 index 0000000..9a5d17c --- /dev/null +++ b/src/assets/red-swingline.svg @@ -0,0 +1,38 @@ + + + + + + + + + + + + + + + + + + + SWINGLINE + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/assets/swingline-hero.png b/src/assets/swingline-hero.png new file mode 100644 index 0000000000000000000000000000000000000000..375b905cf289a7841d4c399a1cd9fc25b78ee0a3 GIT binary patch literal 30031 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�J)Tuy*qRg#aU~7wcNlTXcyP|3aes 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 Wq>=E)CKK@h0000 *"I was told there would be no installation..."* + +Don't want to install anything? Connect to our hosted mcwaddams server via HTTP. + +## Quick Connect + + + + ```bash + claude mcp add mcwaddams-hosted --transport http "https://mcwaddams.supported.systems/mcp" + ``` + + + ```json + { + "mcpServers": { + "mcwaddams": { + "transport": { + "type": "streamable-http", + "url": "https://mcwaddams.supported.systems/mcp" + } + } + } + } + ``` + + + ```python + from mcp import ClientSession + from mcp.client.streamable_http import streamable_http_client + + async with streamable_http_client("https://mcwaddams.supported.systems/mcp") as (read, write): + async with ClientSession(read, write) as session: + await session.initialize() + tools = await session.list_tools() + print(f"Connected! {len(tools.tools)} tools available") + ``` + + + + + +## What's Available + +All 20+ mcwaddams tools are available via the hosted server: + + + + Extract text, images, metadata from Word, Excel, PowerPoint + + + Process `.doc`, `.xls`, `.ppt` files from the 90s + + + Index documents and fetch chapters/sheets on demand + + + Multiple extraction methods with automatic fallback + + + +## Hosted vs Local + +| Feature | Hosted | Local (uvx) | +|---------|--------|-------------| +| Installation | None | `uvx mcwaddams` | +| File Access | URL only | Local + URL | +| Speed | Network latency | Instant | +| Privacy | Files processed on server | Files stay local | +| Availability | Requires internet | Works offline | + + + +## Using with URLs + +The hosted server can process documents from URLs directly: + +```python +# Extract text from a public document +result = await session.call_tool("extract_text", { + "file_path": "https://example.com/report.docx" +}) +``` + +This is particularly useful for processing documents already hosted online. + +## Self-Hosting + +Want the convenience of HTTP without using our server? Self-host your own: + +### Docker Compose + +```yaml +services: + mcwaddams: + image: ghcr.io/ryanmalloy/mcwaddams:latest + environment: + - MCP_TRANSPORT=streamable-http + - MCP_HOST=0.0.0.0 + - MCP_PORT=8000 + ports: + - "8000:8000" +``` + +### With Caddy Reverse Proxy + +Clone the repo and use our docker-compose with caddy-docker-proxy labels: + +```bash +git clone https://github.com/ryanmalloy/mcwaddams.git +cd mcwaddams +cp .env.example .env +# Edit .env to set your hostname +make docker-up +``` + +Your server will be available at `https://your-domain.com/mcp` + +### Local Development + +Run HTTP mode locally without Docker: + +```bash +# Install +pip install mcwaddams + +# Run with HTTP transport +MCP_TRANSPORT=streamable-http MCP_HOST=127.0.0.1 MCP_PORT=8000 python -m mcwaddams.server +``` + +Or with uv: + +```bash +MCP_TRANSPORT=streamable-http MCP_HOST=127.0.0.1 MCP_PORT=8000 uvx mcwaddams +``` + +## Troubleshooting + +### Connection Refused + +``` +Error: Connection refused +``` + +The server may be temporarily down. Try: +1. Check server status at https://status.supported.systems +2. Fall back to local installation: `uvx mcwaddams` + +### Timeout Errors + +Large documents may take longer to process. The hosted server has a 60-second timeout per request. + +For very large documents, consider: +- Using local installation +- Processing documents in chunks via pagination + +### SSL/TLS Errors + +Ensure you're using `https://` not `http://`. The hosted server requires TLS. + +--- + +
+*"So if you could just go ahead and connect... that would be great."* +
diff --git a/src/content/docs/index.mdx b/src/content/docs/index.mdx index 1f5b20c..d5f2f7b 100644 --- a/src/content/docs/index.mdx +++ b/src/content/docs/index.mdx @@ -5,7 +5,8 @@ template: splash hero: tagline: "I was told there would be document extraction." image: - file: ../../assets/stapler.svg + file: ../../assets/swingline-hero.png + alt: "Milton's Red Swingline Stapler" actions: - text: Get Started link: /installation/