anew MCP API

Model Context Protocol JSON-RPC endpoint.

Operations 1

POST /mcp MCP JSON-RPC endpoint #

Work with this as data

Every API here is available over the APIs.io API and to AI agents over MCP.

MCP server

One button, every client — Claude, Cursor, VS Code and the rest.

https://apis.io/mcp

Tools for apis

7 MCP tools reach this
  • find_apisBrowse and filter every API in the catalog.
  • get_api_artifactsOne API's artifacts, grouped by type.
  • get_openapiThe primary OpenAPI for this API.
  • find_similar_apisAPIs that look like this one.
  • apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.
  • resolveTurn a domain, URL or GitHub org into the provider it belongs to.
  • find_cohortsEvery scored population of providers in the catalog.
All 92 tools →

Call it yourself

curl for this page
This API
curl "https://apis.io/api/v1/apis/anew-mcp-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"

Discovery needs no key. Ratings and market analysis are Pro.

Get an API key

Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.

A second provider on the same verified email joins the account you already have.

OpenAPI Specification

anew-mcp-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  title: anew MCP API
  version: 1.0.0
  summary: Encode self-contained HTML pages into shareable URLs.
  description: anew turns a self-contained HTML document into a shareable URL.
  license:
    name: ISC
    identifier: ISC
servers:
- url: https://anew.page
security:
- {}
tags:
- name: MCP
  description: Model Context Protocol JSON-RPC endpoint.
paths:
  /mcp:
    post:
      operationId: mcpRpc
      tags:
      - MCP
      summary: MCP JSON-RPC endpoint
      description: 'Accepts MCP methods: initialize, server/discover, tools/list, tools/call, resources/list, resources/read, resources/templates/list, prompts/list, prompts/get, ping. Dual-era: 2025-11-25 initialize-handshake clients and stateless 2026-07-28 clients (version and capabilities in params._meta, mirrored Mcp-* headers) are both served. Tools: anew_write, anew_read.'
      parameters:
      - name: MCP-Protocol-Version
        in: header
        required: false
        schema:
          type: string
          enum:
          - '2026-07-28'
          - '2025-11-25'
        description: Protocol revision. Omit it and the request is read as handshake-era; 2026-07-28 requires it, matching params._meta["io.modelcontextprotocol/protocolVersion"].
      - name: Mcp-Method
        in: header
        required: false
        schema:
          type: string
        description: Mirrors the body's method. Required on 2026-07-28 requests.
      - name: Mcp-Name
        in: header
        required: false
        schema:
          type: string
        description: Mirrors params.name (tools/call, prompts/get) or params.uri (resources/read). Required on 2026-07-28 requests for those methods.
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              required:
              - jsonrpc
              - method
              properties:
                jsonrpc:
                  const: '2.0'
                id: {}
                method:
                  type: string
                params:
                  type: object
      responses:
        '200':
          description: JSON-RPC response. Under 2025-11-25 a protocol error (-32601, -32602) is also a 200 carrying the error member; the 2026-07-28 era answers those with 400 and 404.
          headers:
            RateLimit-Policy:
              description: 'The enforced quota, draft-ietf-httpapi-ratelimit-headers-11 form: "api";q=300;w=60 — 300 requests per 60 seconds per client IP, shared across /write, /mcp and /a2a/v1.'
              schema:
                type: string
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/JsonRpcResponse'
        '202':
          description: Notification accepted (no body).
        '400':
          description: Parse error (-32700), batch or malformed envelope (-32600), header/body mismatch (-32020), unsupported protocol version (-32022), or invalid params (-32602).
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/JsonRpcError'
        '403':
          description: 'A browser Origin that is opaque, insecure, or non-canonical (code origin_forbidden): any canonically serialized https origin is accepted; loopback deployments accept only loopback origins. Clients that send no Origin are never refused.'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '404':
          description: A method the 2026-07-28 revision does not define (-32601).
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/JsonRpcError'
        '405':
          description: 'Wrong method (code method_not_allowed). Carries Allow: POST, OPTIONS.'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '413':
          description: Request body over 262144 bytes (code body_too_large).
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '429':
          description: 'Over the published quota (code rate_limited). Carries Retry-After: 60, RateLimit-Policy, and RateLimit with r=0. Reading a page URL is not rate limited. Policy: https://anew.page/llms.txt'
          headers:
            RateLimit-Policy:
              description: 'The enforced quota, draft-ietf-httpapi-ratelimit-headers-11 form: "api";q=300;w=60 — 300 requests per 60 seconds per client IP, shared across /write, /mcp and /a2a/v1.'
              schema:
                type: string
            Retry-After:
              description: Seconds to wait — always the full 60-second window, so one wait always clears the refusal.
              schema:
                type: integer
            RateLimit:
              description: 'draft-ietf-httpapi-ratelimit-headers-11 quota state at the moment of refusal: r=0 (exact) and t = the full window (an upper bound on the wait).'
              schema:
                type: string
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
components:
  schemas:
    JsonRpcResponse:
      type: object
      required:
      - jsonrpc
      description: 'A JSON-RPC 2.0 response: exactly one of result or error is present.'
      properties:
        jsonrpc:
          const: '2.0'
        id: {}
        result:
          type: object
        error:
          type: object
          required:
          - code
          - message
          properties:
            code:
              type: integer
            message:
              type: string
            data:
              description: Per-error detail — -32022 carries { supported, requested }.
    JsonRpcError:
      type: object
      required:
      - jsonrpc
      - error
      description: 'A JSON-RPC 2.0 error response: parse error -32700, invalid request -32600, method not found -32601, invalid params -32602, header mismatch -32020, unsupported MCP protocol version -32022, A2A version not supported -32009.'
      properties:
        jsonrpc:
          const: '2.0'
        id: {}
        error:
          type: object
          required:
          - code
          - message
          properties:
            code:
              type: integer
            message:
              type: string
            data:
              description: Per-error detail — -32022 carries { supported, requested }.
    Error:
      type: object
      required:
      - error
      description: 'The envelope every REST failure answers with: a machine-readable code, a human-readable message, a hint where one helps, details where there is a measurement.'
      properties:
        error:
          type: object
          required:
          - code
          - message
          properties:
            code:
              type: string
              enum:
              - not_found
              - method_not_allowed
              - origin_forbidden
              - rate_limited
              - empty_body
              - invalid_utf8
              - json_envelope
              - url_over_budget
              - content_too_large
              - body_too_large
              - markdown_failed
              - content_blocked
              description: Which failure this is. Stable across releases; a caller may switch on it exhaustively.
            message:
              type: string
            hint:
              type: string
              description: What to do instead.
            details:
              type: object
              description: 'On url_over_budget and content_too_large: both physical ceilings (url_limit = the 65,000-byte request line, decoded_limit = the 163,839-byte decode cap) and the overage against the one that tripped — these fire only past the ceilings, never at the 4,000-byte share-safe budget, which warns on a 200 instead. On body_too_large: the body budget, since the encode never ran and there is no url/decoded measurement to report.'
              properties:
                url_bytes:
                  type: integer
                url_limit:
                  type: integer
                decoded_bytes:
                  type: integer
                decoded_limit:
                  type: integer
                body_bytes:
                  type: integer
                body_limit:
                  type: integer
                over:
                  type: integer
externalDocs:
  url: https://anew.page/llms.txt
  description: 'Developer documentation: authentication, rate limits, versioning and deprecation policy, and every machine-readable resource.'