# Northwestern University Libraries Digital Collections API

> Agent integration with the Northwestern University Libraries Digital Collections API

- name: io.github.nulib/dc-api
- version: 2.11.15
- connection class: R0 (autonomous)
- trust: 90/100
- quality: 97/100 (strong)
- owner: not claimed
- descriptor: https://api.protogrid.dev/v1/servers/io.github.nulib%2Fdc-api
- tools: https://api.protogrid.dev/v1/servers/io.github.nulib%2Fdc-api/tools

**An agent can connect right now, no human step.** Remote endpoint, no authentication, reachable on the last probe.

## Connection (mcpServers)

```json
{
  "mcpServers": {
    "dc-api": {
      "type": "http",
      "url": "https://api.dc.library.northwestern.edu/api/v2/mcp"
    }
  }
}
```


## Trust

- hygiene: 95
- liveness: 100
- freshness: 85
- provenance: 80
- drivers: +repository +namespace-matches-repo +reachable +uptime-100% ~updated-35d-ago -unpinned-packages(1)
- Derived from observable signals (official registry feed and our own credential-free probes); no code audit performed.

## Quality 97/100 (strong)

### protocol: 100 (weight 25)

- pass `protocol.modern`: supports 2026-07-28 (server/discover)
- pass `protocol.stateless`: answers without a session
- pass `protocol.transport`: streamable HTTP
- pass `protocol.list_ttl`: tool list is cacheable (ttlMs 3600000)

### authorization: n/a (weight 15)

- n/a `auth.prm`, `auth.as_metadata`, `auth.cimd`: no remote uses OAuth
- n/a `auth.secret_in_url`: no templated URL

### tool hygiene: 100 (weight 30)

- pass `tools.descriptions`: every tool has a description
- pass `tools.description_length`: descriptions are concise
- pass `tools.schemas`: every tool has an object input schema
- pass `tools.annotations`: 8 of 8 tools declare readOnlyHint or destructiveHint
- pass `tools.directory_hints`: every tool declares readOnlyHint, destructiveHint, idempotentHint and openWorldHint
- pass `tools.token_cost`: about 3,422 tokens to load every tool
- pass `tools.api_dump`: tools are not a one-to-one API dump

### stability: 100 (weight 15)

- pass `stability.changes`: no tool changes in 30 days
- pass `stability.rug_pull`: no tool changed its meaning under the same name

### dependencies: 83 (weight 15)

- warn `deps.known_vulns`: 3 advisories of lower severity or without a published fix: GHSA-j965-2qgj-vjmq in aws-sdk@2.1693.0 (indirect, no fix yet), GHSA-hp3w-g68c-fv3c in sprintf-js@1.0.3 (indirect, no fix yet), GHSA-w5hq-g745-h8pq in uuid@8.0.0 (indirect, fixed in 11.1.1)
- pass `deps.mcp_sdk_version`: @modelcontextprotocol/server 2.1.0, no known advisory
- pass `deps.resolvable`: @nulib/dc-api-mcp@2.11.15 resolved: 143 packages

- tools: 8, about 3,422 tokens to load them all
- tool set hash: 2f8f4eea92ba8da47ebe2526af0d781f
- badge: [![protogrid quality](https://protogrid.dev/badge/io.github.nulib/dc-api.svg)](https://protogrid.dev/servers/io.github.nulib/dc-api)
- Checks run on what our credential-free, read-only probes observe; tools are never called and no code audit is performed.

### Tool changes

_No tool definition changes recorded._

## Dependencies

- npm @nulib/dc-api-mcp@2.11.15: resolved, 142 dependencies, MCP SDK @modelcontextprotocol/server 2.1.0
  - GHSA-w5hq-g745-h8pq (moderate) in `` uuid@8.0.0 ``, indirect, fixed in `` 11.1.1 ``, advisory summary: "uuid: Missing buffer bounds check in v3/v5/v6 when buf is provided" https://osv.dev/vulnerability/GHSA-w5hq-g745-h8pq
  - GHSA-hp3w-g68c-fv3c (moderate) in `` sprintf-js@1.0.3 ``, indirect, no fix yet, advisory summary: "sprintf-js vulnerable to denial of service through unbounded precision specifiers" https://osv.dev/vulnerability/GHSA-hp3w-g68c-fv3c
  - GHSA-j965-2qgj-vjmq (low) in `` aws-sdk@2.1693.0 ``, indirect, no fix yet, advisory summary: "JavaScript SDK v2 users should add validation to the region parameter value in or migrate to v3" https://osv.dev/vulnerability/GHSA-j965-2qgj-vjmq

Dependency graphs from deps.dev; advisories from OSV.dev, including the GitHub Advisory Database and the PyPI Advisory Database; all CC BY 4.0.

## Remotes

- https://api.dc.library.northwestern.edu/api/v2/mcp (streamable-http, auth none, reachable true, uptime30d 1)

## Packages

- npm @nulib/dc-api-mcp@2.11.15
- oci ghcr.io/nulib/dc-api-mcp:2.11.15

## Tools (8)

- `get-work`: Retrieve the full metadata for a work from the NUL Digital Collections.
- `list-collections`: List collection records from the NUL Digital Collections.
- `search`: Search for works in the Digital Collections using field-based and/or natural language queries. If both a natural language query and specific field values are provided, the natural language query will take priority, using the specified field values as additional constraints. The result will also include a list of aggregations that show how many results match different values for certain fields. For example, you could see how many results match each collection, work type, or visibility and use that information to refine your search. Perform an empty search to retrieve all works and their aggregations. NOTE: Structured field values enclosed in double quotes will be treated as exact, case-sensitive matches, while unquoted values will be treated as full-text searches.
- `similarity-search`: Find works that are similar to a given work. Uses semantic similarity based on work embeddings.
- `view-collection`: View a collection from the NUL Digital Collections in an interactive viewer.
- `view-search-results`: View results from the search-works tool in an interactive viewer.
- `view-similar-works`: View results from the similarity-search tool in an interactive viewer.
- `view-work`: View a work from the NUL Digital Collections in an interactive viewer.
