DMCA Cases

OG dmca.com cases and API now available on MCP.

Hosted MCP Server

npx add-mcp 'https://mcp.dmca.com/runtime/webhooks/mcp'

Installs into Claude Code, Codex, Cursor and more

Documentation

dmca-cases-public-mcp

Public MCP for DMCA.com cases (company of record: DMCA.com).

Maintained as DMCA MCP Cases.

Tools

ToolUpstream
loginPOST https://api.dmca.com/login
listCasesGET https://api.dmca.com/listCases
listDIYCasesGET https://api.dmca.com/listDIYCases
listComplianceCasesGET https://api.dmca.com/listComplianceCases
getCaseByIdGET https://api.dmca.com/getCaseById?id=
createCasePOST https://api.dmca.com/createCase
createDIYCasePOST https://api.dmca.com/createDIYCase
createComplianceCasePOST https://api.dmca.com/createComplianceCase
updateCasePOST https://api.dmca.com/updateCase
getSiteReportGET https://api.dmca.com/getSiteReport/{domain}

Not exposed: register, badge/protected-item APIs, XARF.

Auth: env DMCA_API_TOKEN (or DMCA_TOKEN) sent as HTTP header Token. login can mint a token. Never logged. Response bodies are returned as upstream JSON — no invented schemas or status enums.

createCase, createDIYCase, createComplianceCase, and updateCase require a valid Token (DMCA_API_TOKEN). getSiteReport also sends Token.

Canonical docs: www.dmca.com/api · OpenAPI 2.1.2 · host https://api.dmca.com.

A) npm / stdio (local clients)

cd packages/mcp-stdio
npm install
npm run build
DMCA_API_TOKEN=your_token node dist/index.js

Cursor / Claude Desktop:

{
  "mcpServers": {
    "dmca-cases": {
      "command": "npx",
      "args": ["-y", "dmca-cases-mcp"],
      "env": { "DMCA_API_TOKEN": "YOUR_TOKEN" }
    }
  }
}

Package name: dmca-cases-mcp · registry mcpName: com.dmca/dmca-cases.

B) Azure Functions (.NET Isolated)

Canonical public host:

https://mcp.dmca.com

Default Azure hostname (fallback, serves the same app):

https://dmca-cases-public-mcp-afdcard8bbdtd4e3.westus3-01.azurewebsites.net

Cover: / (root) and /cover (alias) · Project: azure/DmcaCasesMcp.Functions (.NET 8 Isolated, code deploy — not container).

  • MCP (Functions MCP extension): /runtime/webhooks/mcp (and SSE sibling /runtime/webhooks/mcp/sse). The protocol endpoint is fixed by the Microsoft MCP extension; / is the HTML cover, not the MCP endpoint. Requests need an x-functions-key header (the mcp_extension system key, issued by DMCA.com on request).
  • Info pointer: GET /api/mcp
  • HTTP mirrors: /api/listCases, /api/listDIYCases, /api/listComplianceCases, /api/getCaseById, /api/login, /api/createCase, /api/updateCase, /api/createDIYCase, /api/createComplianceCase, /api/getSiteReport?domain= (upstream path /getSiteReport/{domain})

App setting: DMCA_API_TOKEN.

Deploy (after dotnet + Azure Functions Core Tools are available):

cd azure/DmcaCasesMcp.Functions
func azure functionapp publish dmca-cases-public-mcp --dotnet-isolated

(Use the exact Function App resource name in your subscription if it differs.)

Prefer Flex Consumption.

Registry metadata

See server.json for official MCP Registry (packages + Azure remotes).

Cursor plugin scaffolding

See mcp.json and .cursor-plugin/plugin.json for a future Marketplace submit.

Auto-deploy (GitHub Actions → Azure)

Workflow: .github/workflows/azure-functions-deploy.yml

On push to main (paths under azure/DmcaCasesMcp.Functions/**), GitHub Actions builds the .NET 8 Isolated project and deploys to Function App dmca-cases-public-mcp.

Required repo secret:

  1. Azure Portal → Function App dmca-cases-public-mcp → Get publish profile
  2. GitHub → Settings → Secrets and variables → Actions → AZURE_FUNCTIONAPP_PUBLISH_PROFILE

Also set Function App setting DMCA_API_TOKEN in Azure (not in GitHub) for live API calls.