# dmca-cases-public-mcp Public MCP for [DMCA.com](https://www.dmca.com) cases (company of record: DMCA.com). Maintained as **DMCA MCP Cases**. ## Tools | Tool | Upstream | |------|----------| | `login` | `POST https://api.dmca.com/login` | | `listCases` | `GET https://api.dmca.com/listCases` | | `listDIYCases` | `GET https://api.dmca.com/listDIYCases` | | `listComplianceCases` | `GET https://api.dmca.com/listComplianceCases` | | `getCaseById` | `GET https://api.dmca.com/getCaseById?id=` | | `createCase` | `POST https://api.dmca.com/createCase` | | `createDIYCase` | `POST https://api.dmca.com/createDIYCase` | | `createComplianceCase` | `POST https://api.dmca.com/createComplianceCase` | | `updateCase` | `POST https://api.dmca.com/updateCase` | | `getSiteReport` | `GET 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](https://www.dmca.com/api/) · OpenAPI [2.1.2](https://api.swaggerhub.com/apis/dmca/dmca-api/2.1.2) · host `https://api.dmca.com`. ## A) npm / stdio (local clients) ```bash cd packages/mcp-stdio npm install npm run build DMCA_API_TOKEN=your_token node dist/index.js ``` Cursor / Claude Desktop: ```json { "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): ```bash 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.