Projects › Agentic Systems

AF MCP Platform

The USB-C port of the facility

A credential-brokered Model Context Protocol gateway that lets a physicist's AI assistant use the Analysis Facility's data, metadata, batch and notebook services, with the facility holding the credentials and auditing every call. Designed and built by Giordon Stark, running in production at UChicago and deployable by any analysis facility.

mcp.af.uchicago.edu
One endpoint for every backend
About 800 users
UChicago ATLAS Analysis Facility, the reference deployment
Rucio, AMI, HTCondor, JupyterLab, files
Backends today; ServiceX and PanDA next
Zero raw credentials
Held by the assistant, ever
Diagram: assistants and the portal authenticate with the facility's Keycloak and present their own bearer token to the broker, whose identity, authorization, credential and audit subsystems sit between every tool call and the backend MCP servers; credential services mint HTCondor tokens, Kerberos tickets and VOMS proxies on the user's behalf.
One endpoint, four checks on every call, and credentials that stay on the facility side. Solid arrows carry tool calls; dashed arrows carry credentials minted for the user.

Why a gateway

An AI assistant is only as useful to a physicist as the systems it can reach. On an analysis facility those systems are Rucio for data, AMI for metadata, HTCondor for batch, JupyterLab for interactive work, and behind them the grid: x509 proxies, ATLAS IAM tokens, Kerberos tickets. The obvious shortcut, handing those credentials to the assistant so it can call each service directly, multiplies the places a user has to trust with their identity and leaves no single record of what the assistant did.

The AF MCP Platform takes the other path. Every backend sits behind one Model Context Protocol endpoint. The assistant logs in once, as the user, to the facility’s own identity service. From then on the broker decides what the caller may do, mints the right short-lived credential for each backend on the user’s behalf, forwards the call, and writes an audit record. The assistant never sees a proxy, a token for CERN, or a Kerberos ticket. In Giordon’s phrase, MCP is the USB-C port to a service; this platform is the facility’s single, trusted port.

How it works

The broker is four subsystems behind one HTTP contract.

  • Identity. Every caller, whether a browser, Claude Desktop or a script, presents its own bearer token. The broker validates it directly against the facility’s Keycloak. A token says who is calling and nothing more.
  • Authorization. Permissions are an attribute of the person, not the token. On every request the broker re-reads the caller’s groups and POSIX identity from the Keycloak directory and maps them to permissions through a declarative policy file. A tool the caller is not entitled to does not appear in their tool list at all.
  • Credential. For each backend the broker resolves the credential that backend needs: an OAuth token for Rucio, an ATLAS IAM token brokered through a linked CERN account for AMI and PanDA, an HTCondor IDTOKEN, a CERN Kerberos ticket, or an x509/VOMS proxy. Credentials are short-lived, cached per user and per backend, and minted by small single-purpose services. The VOMS service is the only pod that touches a user’s grid certificate; the passphrase is used once and never stored, and the proxy is redeemed by the backend itself so it never transits the aggregator.
  • Audit. Each tool invocation produces one structured record with the identity attached and an outcome of success, denied or error. Prometheus metrics stay aggregate and never per user; the audit log is the per-user source of truth, and a usage store serves each user their own history, including wall time, bytes returned and an estimate of the tokens the result injected into their assistant’s context.

Adding the next backend is a configuration change, not a code change: one entry registers the server and the permission it requires, and if it needs its own credential flow, one more entry declares the identity provider. The reference deployment has grown this way from Rucio alone to the catalog below.

What a physicist does

Point the assistant at the endpoint and nothing else. The first request is refused, the client discovers the broker’s OAuth endpoints, a browser window opens on the facility’s login page, and the client stores the resulting token itself. Claude Desktop and Claude Code both work this way today.

{
  "mcpServers": {
    "atlas-af": { "url": "https://mcp.af.uchicago.edu/mcp" }
  }
}

From there the assistant can look up datasets and replicas, query metadata, submit and monitor batch jobs, start or stop the user’s JupyterLab server and read the user’s own files on the facility, all as that user and only within what their group membership allows. A client that cannot open a browser, such as a CI job, uses a token minted on the portal’s Tokens page instead.

The portal at mcp-portal.af.uchicago.edu is for setup, not daily work. Its four screens show the connection snippet and a dashboard, the catalog of backends and tools the signed-in account can reach, the Identities page for linking a CERN account and the x509 grid certificate, and the Tokens page.

The reference deployment

The platform runs on the UChicago ATLAS Analysis Facility for its roughly 800 users, with the broker at mcp.af.uchicago.edu and the portal at mcp-portal.af.uchicago.edu, both on the facility’s Kubernetes cluster and deployed from the project’s Helm chart. The hostnames, realm names and group mappings on this page are that deployment’s configuration; nothing about them is built into the software.

ComponentWhat it doesRepository
af-mcp-platformThe broker, the portal and the Helm chartmaniaclab/af-mcp-platform
rucio-mcpATLAS and ESCAPE distributed data management: datasets, files, replicaskratsg/rucio-mcp
ami-mcpATLAS Metadata Interface: provenance and physics metadatakratsg/ami-mcp
condor-mcpSubmit and monitor HTCondor jobs on the facilitybbockelm/golang-htcondor
af-jupyterlab-mcpCreate, inspect and delete the user's own JupyterLab serversmaniaclab/af-jupyterlab-mcp
af-filesystem-mcpBrowse and read the user's own files on the facility's home and data storagemaniaclab/af-filesystem-mcp
servicex-mcpServiceX columnar data delivery as MCP tools (in development)maniaclab/servicex-mcp
voms-token-serviceMints x509/VOMS proxies; the only pod that touches grid certificatesmaniaclab/voms-token-service
condor-token-serviceIssues HTCondor IDTOKENs; the pool signing key never leaves HTCondormaniaclab/condor-token-service
krb5-token-serviceMints CERN Kerberos tickets for CERN-authenticated identitiesmaniaclab/krb5-token-service
af-credentialsLibrary a backend uses to redeem a proxy from the broker at call timemaniaclab/af-credentials
servicex-token-service, atlas-search-mcp-bridgeServiceX refresh-token redemption; auth translation for ATLAS OpenSearchmaniaclab on GitHub

For other facilities

The platform is written to be deployed, not copied. A facility installs the Helm chart against its own Keycloak, registers whichever backend MCP servers it runs, and declares the identity providers those backends need. The credential-minting services follow one small, auditable pattern: one endpoint, one credential type, one binary, so a facility can add its own without touching the broker. The broker is in Python on FastAPI and FastMCP; the portal is a Vue application linted for accessibility with WCAG 2.1 AA as the target. Everything is MIT licensed.

Where it fits

The gateway is the facility-side half of the Lab’s agentic work. The USATLAS Marketplace carries the portable know-how, skills and plugins, that tell an assistant how to use a facility; the gateway is where that assistant’s calls actually land, under the user’s identity and the facility’s policy. Elwood, the Lab’s agentic analysis framework, reaches the Analysis Facility through it. In the team metaphor Giordon uses for Elwood, the gateway is the stadium entrance: everyone comes in through the same door, shows the same badge, and is on the record.

The work was presented at the Throughput Computing 2026 meeting in June 2026 and is part of the IRIS-HEP agentic-analysis roadmap and the CLARIPHY community effort on agentic analysis systems.

Links

People

Status

Version 0.3.5, October 2026. In production on the UChicago Analysis Facility since mid-2026. Phase 1 acceptance, "one AF login, Rucio tools in Claude", met; ServiceX and PanDA backends in progress.