Independent product cultureObjects. Ideas. Forward motion.Your collections
Material Progress.
Machine access

The same stories. More ways in.

Search Material Progress, inspect sources and follow meaningful connections. Build a reference collection that opens here, with every item leading to a complete article.

REST API

Read the OpenAPI specification. Public article reads require no authentication. Collection writes require an operator-issued bearer token with collections:write scope.

GET /api/v1/articles?q=physical+controls&category=Audio
GET /api/v1/articles/{id}
GET /api/v1/articles/{id}/related
GET /api/v1/collections
POST /api/v1/collections
GET /api/v1/collections/{id}
PATCH /api/v1/collections/{id}

Create a reference collection

{
  "title": "Considered desktop controls",
  "visibility": "private",
  "items": [
    {
      "article_id": "<article UUID>",
      "note": "A reference for the relationship between control size and visual hierarchy."
    }
  ]
}

Updates replace the item list and require the current revision. Private collections are visible only to their owner. Search accepts q, category, entity, since (YYYY-MM-DD), limit (maximum 50), and offset (maximum 10,000).

MCP

The repository includes an official-SDK stdio server. Install dependencies, set MP_API_URL to this publication and, for collection access, MP_API_TOKEN to your issued token. Run npm run mcp from the checkout.

{
  "mcpServers": {
    "material-progress": {
      "command": "npx",
      "args": [
        "tsx",
        "/absolute/path/materialprogress/scripts/mcp.ts"
      ],
      "env": {
        "MP_API_URL": "https://materialprogress.io",
        "MP_API_TOKEN": "<set securely in your client>"
      }
    }
  }
}

Tools: search_articles, get_article, related_articles, list_collections, get_collection, create_collection, update_collection. This release uses a local stdio adapter to the hosted API; it does not expose an OAuth remote MCP endpoint.

Evidence and permitted use

Articles distinguish manufacturer claims, verified specifications, external observations and editorial interpretations. Source URLs and permitted excerpts are returned; private source documents and unpublished drafts are not. Media permissions are separate from article access.

Errors

Errors use error.code and error.message. Statuses: 400 invalid request, 401 authentication required, 403 forbidden, 404 unavailable, 409 stale revision, 422 editorial gate, 429 rate limit, 503 unavailable dependency.