{"id":32469147,"url":"https://github.com/knuckles-team/archivebox-api","last_synced_at":"2026-05-10T00:23:22.505Z","repository":{"id":319952452,"uuid":"1080222296","full_name":"Knuckles-Team/archivebox-api","owner":"Knuckles-Team","description":"ArchiveBox API and MCP Server","archived":false,"fork":false,"pushed_at":"2026-03-06T08:09:39.000Z","size":114,"stargazers_count":1,"open_issues_count":2,"forks_count":1,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-03-06T12:06:07.289Z","etag":null,"topics":["a2a","a2a-server","ag-ui","archivebox","fastmcp","mcp-server","python"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Knuckles-Team.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":"AGENTS.md","dco":null,"cla":null}},"created_at":"2025-10-21T03:43:43.000Z","updated_at":"2026-03-06T07:40:54.000Z","dependencies_parsed_at":"2026-03-02T08:01:00.799Z","dependency_job_id":null,"html_url":"https://github.com/Knuckles-Team/archivebox-api","commit_stats":null,"previous_names":["knuckles-team/archivebox-api"],"tags_count":46,"template":false,"template_full_name":null,"purl":"pkg:github/Knuckles-Team/archivebox-api","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Knuckles-Team%2Farchivebox-api","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Knuckles-Team%2Farchivebox-api/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Knuckles-Team%2Farchivebox-api/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Knuckles-Team%2Farchivebox-api/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Knuckles-Team","download_url":"https://codeload.github.com/Knuckles-Team/archivebox-api/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Knuckles-Team%2Farchivebox-api/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":30282888,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-03-09T02:57:19.223Z","status":"ssl_error","status_checked_at":"2026-03-09T02:56:26.373Z","response_time":61,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["a2a","a2a-server","ag-ui","archivebox","fastmcp","mcp-server","python"],"created_at":"2025-10-26T15:20:27.510Z","updated_at":"2026-05-10T00:23:22.487Z","avatar_url":"https://github.com/Knuckles-Team.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# ArchiveBox API - A2A | AG-UI | MCP\n\n![PyPI - Version](https://img.shields.io/pypi/v/archivebox-api)\n![MCP Server](https://badge.mcpx.dev?type=server 'MCP Server')\n![PyPI - Downloads](https://img.shields.io/pypi/dd/archivebox-api)\n![GitHub Repo stars](https://img.shields.io/github/stars/Knuckles-Team/archivebox-api)\n![GitHub forks](https://img.shields.io/github/forks/Knuckles-Team/archivebox-api)\n![GitHub contributors](https://img.shields.io/github/contributors/Knuckles-Team/archivebox-api)\n![PyPI - License](https://img.shields.io/pypi/l/archivebox-api)\n![GitHub](https://img.shields.io/github/license/Knuckles-Team/archivebox-api)\n\n![GitHub last commit (by committer)](https://img.shields.io/github/last-commit/Knuckles-Team/archivebox-api)\n![GitHub pull requests](https://img.shields.io/github/issues-pr/Knuckles-Team/archivebox-api)\n![GitHub closed pull requests](https://img.shields.io/github/issues-pr-closed/Knuckles-Team/archivebox-api)\n![GitHub issues](https://img.shields.io/github/issues/Knuckles-Team/archivebox-api)\n\n![GitHub top language](https://img.shields.io/github/languages/top/Knuckles-Team/archivebox-api)\n![GitHub language count](https://img.shields.io/github/languages/count/Knuckles-Team/archivebox-api)\n![GitHub repo size](https://img.shields.io/github/repo-size/Knuckles-Team/archivebox-api)\n![GitHub repo file count (file type)](https://img.shields.io/github/directory-file-count/Knuckles-Team/archivebox-api)\n![PyPI - Wheel](https://img.shields.io/pypi/wheel/archivebox-api)\n![PyPI - Implementation](https://img.shields.io/pypi/implementation/archivebox-api)\n\n*Version: 0.9.0*\n\n## Overview\n\nArchiveBox API Python Wrapper \u0026 Fast MCP Server!\n\nThis repository provides a Python wrapper for interacting with the ArchiveBox API, enabling programmatic access to web archiving functionality. It includes a Model Context Protocol (MCP) server for Agentic AI, enhanced with various authentication mechanisms, middleware for observability and control, and optional Eunomia authorization for policy-based access control.\n\nContributions are welcome!\n\nAll API Response objects are customized for the response call. You can access return values in a `parent.value.nested_value` format, or use `parent.json()` to get the response as a dictionary.\n\n#### Features:\n- **Authentication**: Supports multiple authentication types including none (disabled), static (internal tokens), JWT, OAuth Proxy, OIDC Proxy, and Remote OAuth for external identity providers.\n- **Middleware**: Includes logging, timing, rate limiting, and error handling for robust server operation.\n- **Eunomia Authorization**: Optional policy-based authorization with embedded or remote Eunomia server integration.\n- **Resources**: Provides `instance_config` for ArchiveBox configuration.\n- **Prompts**: Includes `cli_add_prompt` for AI-driven interactions.\n\n\n## API\n\n### API Calls:\n- Authentication\n- Core Model (Snapshots, ArchiveResults, Tags)\n- CLI Commands (add, update, schedule, list, remove)\n\nIf your API call isn't supported, you can extend the functionality by adding custom endpoints or modifying the existing wrapper.\n\n[These are the API endpoints currently supported](https://demo.archivebox.io/api/v1/docs)\n\n## MCP\n\nAll the available API Calls above are wrapped in MCP Tools. You can find those below with their tool descriptions and associated tag.\n\n### MCP Tools\n\n| Function Name        | Description                                                    | Tag(s)           |\n|:---------------------|:---------------------------------------------------------------|:-----------------|\n| `get_api_token`      | Generate an API token for a given username \u0026 password.         | `authentication` |\n| `check_api_token`    | Validate an API token to make sure it's valid and non-expired. | `authentication` |\n| `get_snapshots`      | Retrieve list of snapshots.                                    | `core`           |\n| `get_snapshot`       | Get a specific Snapshot by abid or id.                         | `core`           |\n| `get_archiveresults` | List all ArchiveResult entries matching these filters.         | `core`           |\n| `get_tag`            | Get a specific Tag by id or abid.                              | `core`           |\n| `get_any`            | Get a specific Snapshot, ArchiveResult, or Tag by abid.        | `core`           |\n| `cli_add`            | Execute archivebox add command.                                | `cli`            |\n| `cli_update`         | Execute archivebox update command.                             | `cli`            |\n| `cli_schedule`       | Execute archivebox schedule command.                           | `cli`            |\n| `cli_list`           | Execute archivebox list command.                               | `cli`            |\n| `cli_remove`         | Execute archivebox remove command.                             | `cli`            |\n\n## A2A Agent\n\n\n### Architecture:\n\n```mermaid\n---\nconfig:\n  layout: dagre\n---\nflowchart TB\n subgraph subGraph0[\"Agent Capabilities\"]\n        C[\"Agent\"]\n        B[\"A2A Server - Uvicorn/FastAPI\"]\n        D[\"MCP Tools\"]\n        F[\"Agent Skills\"]\n  end\n    C --\u003e D \u0026 F\n    A[\"User Query\"] --\u003e B\n    B --\u003e C\n    D --\u003e E[\"Platform API\"]\n\n     C:::agent\n     B:::server\n     A:::server\n    classDef server fill:#f9f,stroke:#333\n    classDef agent fill:#bbf,stroke:#333,stroke-width:2px\n    style B stroke:#000000,fill:#FFD600\n    style D stroke:#000000,fill:#BBDEFB\n    style F fill:#BBDEFB\n    style A fill:#C8E6C9\n    style subGraph0 fill:#FFF9C4\n```\n\n### Component Interaction Diagram\n\n```mermaid\nsequenceDiagram\n    participant User\n    participant Server as A2A Server\n    participant Agent as Agent\n    participant Skill as Agent Skills\n    participant MCP as MCP Tools\n\n    User-\u003e\u003eServer: Send Query\n    Server-\u003e\u003eAgent: Invoke Agent\n    Agent-\u003e\u003eSkill: Analyze Skills Available\n    Skill-\u003e\u003eAgent: Provide Guidance on Next Steps\n    Agent-\u003e\u003eMCP: Invoke Tool\n    MCP--\u003e\u003eAgent: Tool Response Returned\n    Agent--\u003e\u003eAgent: Return Results Summarized\n    Agent--\u003e\u003eServer: Final Response\n    Server--\u003e\u003eUser: Output\n```\n\n\n## Graph Architecture\n\nThis agent uses `pydantic-graph` orchestration for intelligent routing and optimal context management.\n\n```mermaid\n---\ntitle: Archivebox API Graph Agent\n---\nstateDiagram-v2\n  [*] --\u003e RouterNode: User Query\n  RouterNode --\u003e DomainNode: Classified Domain\n  RouterNode --\u003e [*]: Low confidence / Error\n  DomainNode --\u003e [*]: Domain Result\n```\n\n- **RouterNode**: A fast, lightweight LLM (e.g., `nvidia/nemotron-3-super`) that classifies the user's query into one of the specialized domains.\n- **DomainNode**: The executor node. For the selected domain, it dynamically sets environment variables to temporarily enable ONLY the tools relevant to that domain, creating a highly focused sub-agent (e.g., `gpt-4o`) to complete the request. This preserves LLM context and prevents tool hallucination.\n\n## Usage\n\n### MCP\n\n#### MCP CLI\n\n| Short Flag | Long Flag                          | Description                                                                 |\n|------------|------------------------------------|-----------------------------------------------------------------------------|\n| -h         | --help                             | Display help information                                                    |\n| -t         | --transport                        | Transport method: 'stdio', 'http', or 'sse' [legacy] (default: stdio)       |\n| -s         | --host                             | Host address for HTTP transport (default: 0.0.0.0)                          |\n| -p         | --port                             | Port number for HTTP transport (default: 8000)                              |\n|            | --auth-type                        | Authentication type: 'none', 'static', 'jwt', 'oauth-proxy', 'oidc-proxy', 'remote-oauth' (default: none) |\n|            | --token-jwks-uri                   | JWKS URI for JWT verification                                              |\n|            | --token-issuer                     | Issuer for JWT verification                                                |\n|            | --token-audience                   | Audience for JWT verification                                              |\n|            | --oauth-upstream-auth-endpoint     | Upstream authorization endpoint for OAuth Proxy                             |\n|            | --oauth-upstream-token-endpoint    | Upstream token endpoint for OAuth Proxy                                    |\n|            | --oauth-upstream-client-id         | Upstream client ID for OAuth Proxy                                         |\n|            | --oauth-upstream-client-secret     | Upstream client secret for OAuth Proxy                                     |\n|            | --oauth-base-url                   | Base URL for OAuth Proxy                                                   |\n|            | --oidc-config-url                  | OIDC configuration URL                                                     |\n|            | --oidc-client-id                   | OIDC client ID                                                             |\n|            | --oidc-client-secret               | OIDC client secret                                                         |\n|            | --oidc-base-url                    | Base URL for OIDC Proxy                                                    |\n|            | --remote-auth-servers              | Comma-separated list of authorization servers for Remote OAuth             |\n|            | --remote-base-url                  | Base URL for Remote OAuth                                                  |\n|            | --allowed-client-redirect-uris     | Comma-separated list of allowed client redirect URIs                       |\n|            | --eunomia-type                     | Eunomia authorization type: 'none', 'embedded', 'remote' (default: none)   |\n|            | --eunomia-policy-file              | Policy file for embedded Eunomia (default: mcp_policies.json)              |\n|            | --eunomia-remote-url               | URL for remote Eunomia server                                              |\n\n#### Using as an MCP Server\n\nThe MCP Server can be run in two modes: `stdio` (for local testing) or `http` (for networked access). To start the server, use the following commands:\n\n#### Run in stdio mode (default):\n```bash\narchivebox-mcp --transport \"stdio\"\n```\n\n#### Run in HTTP mode:\n```bash\narchivebox-mcp --transport \"http\" --host \"0.0.0.0\" --port \"8000\"\n```\n\n### Basic API Usage\n\n**Token Authentication**\n\n```python\n#!/usr/bin/python\n# coding: utf-8\nimport archivebox_api\n\narchivebox_url = \"\u003cARCHIVEBOX_URL\u003e\"\ntoken = \"\u003cARCHIVEBOX_TOKEN\u003e\"\n\nclient = archivebox_api.Api(\n    url=archivebox_url,\n    token=token\n)\n\nsnapshots = client.get_snapshots()\nprint(f\"Snapshots: {snapshots.json()}\")\n```\n\n**Basic Authentication**\n\n```python\n#!/usr/bin/python\n# coding: utf-8\nimport archivebox_api\n\nusername = \"\u003cARCHIVEBOX_USERNAME\u003e\"\npassword = \"\u003cARCHIVEBOX_PASSWORD\u003e\"\narchivebox_url = \"\u003cARCHIVEBOX_URL\u003e\"\n\nclient = archivebox_api.Api(\n    url=archivebox_url,\n    username=username,\n    password=password\n)\n\nsnapshots = client.get_snapshots()\nprint(f\"Snapshots: {snapshots.json()}\")\n```\n\n**API Key Authentication**\n\n```python\n#!/usr/bin/python\n# coding: utf-8\nimport archivebox_api\n\narchivebox_url = \"\u003cARCHIVEBOX_URL\u003e\"\napi_key = \"\u003cARCHIVEBOX_API_KEY\u003e\"\n\nclient = archivebox_api.Api(\n    url=archivebox_url,\n    api_key=api_key\n)\n\nsnapshots = client.get_snapshots()\nprint(f\"Snapshots: {snapshots.json()}\")\n```\n\n**SSL Verify**\n\n```python\n#!/usr/bin/python\n# coding: utf-8\nimport archivebox_api\n\nusername = \"\u003cARCHIVEBOX_USERNAME\u003e\"\npassword = \"\u003cARCHIVEBOX_PASSWORD\u003e\"\narchivebox_url = \"\u003cARCHIVEBOX_URL\u003e\"\n\nclient = archivebox_api.Api(\n    url=archivebox_url,\n    username=username,\n    password=password,\n    verify=False\n)\n\nsnapshots = client.get_snapshots()\nprint(f\"Snapshots: {snapshots.json()}\")\n```\n\n### Deploy MCP Server as a Service\n\nThe ArchiveBox MCP server can be deployed using Docker, with configurable authentication, middleware, and Eunomia authorization.\n\n#### Using Docker Run\n\n```bash\ndocker pull archivebox/archivebox:latest\n\ndocker run -d \\\n  --name archivebox-mcp \\\n  -p 8004:8004 \\\n  -e HOST=0.0.0.0 \\\n  -e PORT=8004 \\\n  -e TRANSPORT=http \\\n  -e AUTH_TYPE=none \\\n  -e EUNOMIA_TYPE=none \\\n  -e ARCHIVEBOX_URL=https://yourinstance.archivebox.com \\\n  -e ARCHIVEBOX_USERNAME=user \\\n  -e ARCHIVEBOX_PASSWORD=pass \\\n  -e ARCHIVEBOX_TOKEN=token \\\n  -e ARCHIVEBOX_API_KEY=api_key \\\n  -e ARCHIVEBOX_SSL_VERIFY=False \\\n  archivebox/archivebox:latest\n```\n\nFor advanced authentication (e.g., JWT, OAuth Proxy, OIDC Proxy, Remote OAuth) or Eunomia, add the relevant environment variables:\n\n```bash\ndocker run -d \\\n  --name archivebox-mcp \\\n  -p 8004:8004 \\\n  -e HOST=0.0.0.0 \\\n  -e PORT=8004 \\\n  -e TRANSPORT=http \\\n  -e AUTH_TYPE=oidc-proxy \\\n  -e OIDC_CONFIG_URL=https://provider.com/.well-known/openid-configuration \\\n  -e OIDC_CLIENT_ID=your-client-id \\\n  -e OIDC_CLIENT_SECRET=your-client-secret \\\n  -e OIDC_BASE_URL=https://your-server.com \\\n  -e ALLOWED_CLIENT_REDIRECT_URIS=http://localhost:*,https://*.example.com/* \\\n  -e EUNOMIA_TYPE=embedded \\\n  -e EUNOMIA_POLICY_FILE=/app/mcp_policies.json \\\n  -e ARCHIVEBOX_URL=https://yourinstance.archivebox.com \\\n  -e ARCHIVEBOX_USERNAME=user \\\n  -e ARCHIVEBOX_PASSWORD=pass \\\n  -e ARCHIVEBOX_TOKEN=token \\\n  -e ARCHIVEBOX_API_KEY=api_key \\\n  -e ARCHIVEBOX_SSL_VERIFY=False \\\n  archivebox/archivebox:latest\n```\n\n#### Using Docker Compose\n\nCreate a `docker-compose.yml` file:\n\n```yaml\nservices:\n  archivebox-mcp:\n    image: archivebox/archivebox:latest\n    environment:\n      - HOST=0.0.0.0\n      - PORT=8004\n      - TRANSPORT=http\n      - AUTH_TYPE=none\n      - EUNOMIA_TYPE=none\n      - ARCHIVEBOX_URL=https://yourinstance.archivebox.com\n      - ARCHIVEBOX_USERNAME=user\n      - ARCHIVEBOX_PASSWORD=pass\n      - ARCHIVEBOX_TOKEN=token\n      - ARCHIVEBOX_API_KEY=api_key\n      - ARCHIVEBOX_SSL_VERIFY=False\n    ports:\n      - 8004:8004\n```\n\nFor advanced setups with authentication and Eunomia:\n\n```yaml\nservices:\n  archivebox-mcp:\n    image: archivebox/archivebox:latest\n    environment:\n      - HOST=0.0.0.0\n      - PORT=8004\n      - TRANSPORT=http\n      - AUTH_TYPE=oidc-proxy\n      - OIDC_CONFIG_URL=https://provider.com/.well-known/openid-configuration\n      - OIDC_CLIENT_ID=your-client-id\n      - OIDC_CLIENT_SECRET=your-client-secret\n      - OIDC_BASE_URL=https://your-server.com\n      - ALLOWED_CLIENT_REDIRECT_URIS=http://localhost:*,https://*.example.com/*\n      - EUNOMIA_TYPE=embedded\n      - EUNOMIA_POLICY_FILE=/app/mcp_policies.json\n      - ARCHIVEBOX_URL=https://yourinstance.archivebox.com\n      - ARCHIVEBOX_USERNAME=user\n      - ARCHIVEBOX_PASSWORD=pass\n      - ARCHIVEBOX_TOKEN=token\n      - ARCHIVEBOX_API_KEY=api_key\n      - ARCHIVEBOX_SSL_VERIFY=False\n    ports:\n      - 8004:8004\n    volumes:\n      - ./mcp_policies.json:/app/mcp_policies.json\n```\n\nRun the service:\n\n```bash\ndocker-compose up -d\n```\n\n#### Configure `mcp.json` for AI Integration\n\nRecommended: Store secrets in environment variables with lookup in the JSON file.\n\nFor Testing Only: Plain text storage will also work, although **not** recommended.\n\n```json\n{\n  \"mcpServers\": {\n    \"archivebox\": {\n      \"command\": \"uv\",\n      \"args\": [\n        \"run\",\n        \"--with\",\n        \"archivebox-api\",\n        \"archivebox-mcp\",\n        \"--transport\",\n        \"${TRANSPORT}\",\n        \"--host\",\n        \"${HOST}\",\n        \"--port\",\n        \"${PORT}\",\n        \"--auth-type\",\n        \"${AUTH_TYPE}\",\n        \"--eunomia-type\",\n        \"${EUNOMIA_TYPE}\"\n      ],\n      \"env\": {\n        \"ARCHIVEBOX_URL\": \"https://yourinstance.archivebox.com\",\n        \"ARCHIVEBOX_USERNAME\": \"user\",\n        \"ARCHIVEBOX_PASSWORD\": \"pass\",\n        \"ARCHIVEBOX_TOKEN\": \"token\",\n        \"ARCHIVEBOX_API_KEY\": \"api_key\",\n        \"ARCHIVEBOX_VERIFY\": \"False\",\n        \"TOKEN_JWKS_URI\": \"${TOKEN_JWKS_URI}\",\n        \"TOKEN_ISSUER\": \"${TOKEN_ISSUER}\",\n        \"TOKEN_AUDIENCE\": \"${TOKEN_AUDIENCE}\",\n        \"OAUTH_UPSTREAM_AUTH_ENDPOINT\": \"${OAUTH_UPSTREAM_AUTH_ENDPOINT}\",\n        \"OAUTH_UPSTREAM_TOKEN_ENDPOINT\": \"${OAUTH_UPSTREAM_TOKEN_ENDPOINT}\",\n        \"OAUTH_UPSTREAM_CLIENT_ID\": \"${OAUTH_UPSTREAM_CLIENT_ID}\",\n        \"OAUTH_UPSTREAM_CLIENT_SECRET\": \"${OAUTH_UPSTREAM_CLIENT_SECRET}\",\n        \"OAUTH_BASE_URL\": \"${OAUTH_BASE_URL}\",\n        \"OIDC_CONFIG_URL\": \"${OIDC_CONFIG_URL}\",\n        \"OIDC_CLIENT_ID\": \"${OIDC_CLIENT_ID}\",\n        \"OIDC_CLIENT_SECRET\": \"${OIDC_CLIENT_SECRET}\",\n        \"OIDC_BASE_URL\": \"${OIDC_BASE_URL}\",\n        \"REMOTE_AUTH_SERVERS\": \"${REMOTE_AUTH_SERVERS}\",\n        \"REMOTE_BASE_URL\": \"${REMOTE_BASE_URL}\",\n        \"ALLOWED_CLIENT_REDIRECT_URIS\": \"${ALLOWED_CLIENT_REDIRECT_URIS}\",\n        \"EUNOMIA_TYPE\": \"${EUNOMIA_TYPE}\",\n        \"EUNOMIA_POLICY_FILE\": \"${EUNOMIA_POLICY_FILE}\",\n        \"EUNOMIA_REMOTE_URL\": \"${EUNOMIA_REMOTE_URL}\"\n      },\n      \"timeout\": 200000\n    }\n  }\n}\n```\n\n#### CLI Parameters\n\nThe `archivebox-mcp` command supports the following CLI options for configuration:\n\n- `--transport`: Transport method (`stdio`, `http`, `sse`) [default: `http`]\n- `--host`: Host address for HTTP transport [default: `0.0.0.0`]\n- `--port`: Port number for HTTP transport [default: `8000`]\n- `--auth-type`: Authentication type (`none`, `static`, `jwt`, `oauth-proxy`, `oidc-proxy`, `remote-oauth`) [default: `none`]\n- `--token-jwks-uri`: JWKS URI for JWT verification\n- `--token-issuer`: Issuer for JWT verification\n- `--token-audience`: Audience for JWT verification\n- `--oauth-upstream-auth-endpoint`: Upstream authorization endpoint for OAuth Proxy\n- `--oauth-upstream-token-endpoint`: Upstream token endpoint for OAuth Proxy\n- `--oauth-upstream-client-id`: Upstream client ID for OAuth Proxy\n- `--oauth-upstream-client-secret`: Upstream client secret for OAuth Proxy\n- `--oauth-base-url`: Base URL for OAuth Proxy\n- `--oidc-config-url`: OIDC configuration URL\n- `--oidc-client-id`: OIDC client ID\n- `--oidc-client-secret`: OIDC client secret\n- `--oidc-base-url`: Base URL for OIDC Proxy\n- `--remote-auth-servers`: Comma-separated list of authorization servers for Remote OAuth\n- `--remote-base-url`: Base URL for Remote OAuth\n- `--allowed-client-redirect-uris`: Comma-separated list of allowed client redirect URIs\n- `--eunomia-type`: Eunomia authorization type (`none`, `embedded`, `remote`) [default: `none`]\n- `--eunomia-policy-file`: Policy file for embedded Eunomia [default: `mcp_policies.json`]\n- `--eunomia-remote-url`: URL for remote Eunomia server\n\n#### Middleware\n\nThe MCP server includes the following built-in middleware for enhanced functionality:\n\n- **ErrorHandlingMiddleware**: Provides comprehensive error logging and transformation.\n- **RateLimitingMiddleware**: Limits request frequency with a token bucket algorithm (10 requests/second, burst capacity of 20).\n- **TimingMiddleware**: Tracks execution time of requests.\n- **LoggingMiddleware**: Logs all requests and responses for observability.\n\n#### Eunomia Authorization\n\nThe server supports optional Eunomia authorization for policy-based access control:\n\n- **Disabled (`none`)**: No authorization checks.\n- **Embedded (`embedded`)**: Runs an embedded Eunomia server with a local policy file (`mcp_policies.json` by default).\n- **Remote (`remote`)**: Connects to an external Eunomia server for centralized policy decisions.\n\nTo configure Eunomia policies:\n\n```bash\n# Initialize a default policy file\neunomia-mcp init\n\n# Validate the policy file\neunomia-mcp validate mcp_policies.json\n```\n\n### A2A CLI\n#### Endpoints\n- **Web UI**: `http://localhost:8000/` (if enabled)\n- **A2A**: `http://localhost:8000/a2a` (Discovery: `/a2a/.well-known/agent.json`)\n- **AG-UI**: `http://localhost:8000/ag-ui` (POST)\n\n| Short Flag | Long Flag         | Description                                                            |\n|------------|-------------------|------------------------------------------------------------------------|\n| -h         | --help            | Display help information                                               |\n|            | --host            | Host to bind the server to (default: 0.0.0.0)                          |\n|            | --port            | Port to bind the server to (default: 9000)                             |\n|            | --reload          | Enable auto-reload                                                     |\n|            | --provider        | LLM Provider: 'openai', 'anthropic', 'google', 'huggingface'           |\n|            | --model-id        | LLM Model ID (default: nvidia/nemotron-3-super)                                       |\n|            | --base-url        | LLM Base URL (for OpenAI compatible providers)                         |\n|            | --api-key         | LLM API Key                                                            |\n\n|            | --mcp-url         | MCP Server URL (default: http://localhost:8000/mcp)                    |\n|            | --web             | Enable Pydantic AI Web UI                                              | False (Env: ENABLE_WEB_UI) |\n\n\n\n## Install Python Package\n\n```bash\npython -m pip install archivebox-api[all]\n```\n\n\n## Repository Owners\n\n\u003cimg width=\"100%\" height=\"180em\" src=\"https://github-readme-stats.vercel.app/api?username=Knucklessg1\u0026show_icons=true\u0026hide_border=true\u0026\u0026count_private=true\u0026include_all_commits=true\" /\u003e\n\n![GitHub followers](https://img.shields.io/github/followers/Knucklessg1)\n\n![GitHub User's stars](https://img.shields.io/github/stars/Knucklessg1)\n\n\n## MCP Configuration Examples\n\n### 1. Standard IO (stdio) Deployment\n\n```json\n{\n  \"mcpServers\": {\n    \"archivebox-api\": {\n      \"command\": \"uv\",\n      \"args\": [\n        \"run\",\n        \"archivebox-mcp\"\n      ],\n      \"env\": {\n        \"AGENT_DESCRIPTION\": \"\u003cYOUR_AGENT_DESCRIPTION\u003e\",\n        \"AGENT_SYSTEM_PROMPT\": \"\u003cYOUR_AGENT_SYSTEM_PROMPT\u003e\",\n        \"ARCHIVEBOX_API_KEY\": \"\u003cYOUR_ARCHIVEBOX_API_KEY\u003e\",\n        \"ARCHIVEBOX_PASSWORD\": \"\u003cYOUR_ARCHIVEBOX_PASSWORD\u003e\",\n        \"ARCHIVEBOX_TOKEN\": \"\u003cYOUR_ARCHIVEBOX_TOKEN\u003e\",\n        \"ARCHIVEBOX_URL\": \"\u003cYOUR_ARCHIVEBOX_URL\u003e\",\n        \"ARCHIVEBOX_USERNAME\": \"\u003cYOUR_ARCHIVEBOX_USERNAME\u003e\",\n        \"ARCHIVEBOX_VERIFY\": \"\u003cYOUR_ARCHIVEBOX_VERIFY\u003e\",\n        \"AUTHENTICATIONTOOL\": \"True\",\n        \"CLITOOL\": \"True\",\n        \"CORETOOL\": \"True\",\n        \"DEFAULT_AGENT_NAME\": \"\u003cYOUR_DEFAULT_AGENT_NAME\u003e\",\n        \"MISCTOOL\": \"True\"\n      }\n    }\n  }\n}\n```\n\n### 2. Streamable HTTP (SSE) Deployment\n\n```json\n{\n  \"mcpServers\": {\n    \"archivebox-api\": {\n      \"command\": \"uv\",\n      \"args\": [\n        \"run\",\n        \"archivebox-mcp\",\n        \"--transport\",\n        \"http\",\n        \"--host\",\n        \"0.0.0.0\",\n        \"--port\",\n        \"8000\"\n      ],\n      \"env\": {\n        \"AGENT_DESCRIPTION\": \"\u003cYOUR_AGENT_DESCRIPTION\u003e\",\n        \"AGENT_SYSTEM_PROMPT\": \"\u003cYOUR_AGENT_SYSTEM_PROMPT\u003e\",\n        \"ARCHIVEBOX_API_KEY\": \"\u003cYOUR_ARCHIVEBOX_API_KEY\u003e\",\n        \"ARCHIVEBOX_PASSWORD\": \"\u003cYOUR_ARCHIVEBOX_PASSWORD\u003e\",\n        \"ARCHIVEBOX_TOKEN\": \"\u003cYOUR_ARCHIVEBOX_TOKEN\u003e\",\n        \"ARCHIVEBOX_URL\": \"\u003cYOUR_ARCHIVEBOX_URL\u003e\",\n        \"ARCHIVEBOX_USERNAME\": \"\u003cYOUR_ARCHIVEBOX_USERNAME\u003e\",\n        \"ARCHIVEBOX_VERIFY\": \"\u003cYOUR_ARCHIVEBOX_VERIFY\u003e\",\n        \"AUTHENTICATIONTOOL\": \"True\",\n        \"CLITOOL\": \"True\",\n        \"CORETOOL\": \"True\",\n        \"DEFAULT_AGENT_NAME\": \"\u003cYOUR_DEFAULT_AGENT_NAME\u003e\",\n        \"MISCTOOL\": \"True\"\n      }\n    }\n  }\n}\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fknuckles-team%2Farchivebox-api","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fknuckles-team%2Farchivebox-api","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fknuckles-team%2Farchivebox-api/lists"}