{"$schema":"https://wellknown.network/schemas/agent-record-v1.json","schemaVersion":"1","id":"ag_z8xhg9sfbh52","handle":"ojs-mcp","url":"https://wellknown.network/agents/ojs-mcp","links":{"self":"https://wellknown.network/agents/ojs-mcp/record.json","html":"https://wellknown.network/agents/ojs-mcp","markdown":"https://wellknown.network/agents/ojs-mcp/record.md","api":"https://wellknown.network/api/v1/agents/ojs-mcp","status":"https://wellknown.network/api/v1/agents/ojs-mcp/status","claim":"https://wellknown.network/agents/ojs-mcp/claim","claimApi":"https://wellknown.network/api/v1/claims","claimDescriptor":"https://wellknown.network/agents/ojs-mcp/claim.json","badge":"https://wellknown.network/agents/ojs-mcp/badge.svg","openapi":"https://wellknown.network/openapi.json","history":"https://wellknown.network/api/v1/agents/ojs-mcp/history","tools":"https://wellknown.network/api/v1/agents/ojs-mcp/tools"},"ard":{"identifier":"urn:air::server:ojs-mcp","type":"application/mcp-server-card+json"},"kind":"mcp_server","declared":{"name":"ojs-mcp","summary":"MCP server for the authenticated Open Journal Systems REST API (OJS 3.5/3.6)","description":"# ojs-mcp\n\n[![tests](https://github.com/mpasternak/ojs-mcp/actions/workflows/tests.yml/badge.svg)](https://github.com/mpasternak/ojs-mcp/actions/workflows/tests.yml)\n[![PyPI](https://img.shields.io/pypi/v/ojs-mcp.svg)](https://pypi.org/project/ojs-mcp/)\n[![License: MIT](https://img.shields.io/badge/license-MIT-blue.svg)](https://github.com/mpasternak/ojs-mcp/blob/main/LICENSE)\n\nAn [MCP](https://modelcontextprotocol.io/) server for the authenticated\nREST API of [Open Journal Systems](https://pkp.sfu.ca/ojs/) (OJS\n3.5/3.6). Connected to an MCP client (Claude Desktop, Claude Code, and\nothers), it gives the model access to a journal's submissions, reviews,\nissues, and editorial statistics — and, with writes explicitly enabled,\nalso to making editorial decisions, publishing, and editing metadata.\n\n## Verified against a live OJS 3.5\n\nEvery tool has been exercised end-to-end against a real OJS 3.5.0-5\ninstance — the sixteen read tools, the `ojs_request` escape hatch, and all\nfive write tools. The write tools were checked by reading back the state\nOJS actually ended up in, not by trusting the status code: an announcement\ncreated, publication metadata edited, a submission carried from the\nsubmission stage to production by two editorial decisions, then published\nand unpublished again.\n\nThat instance is reproducible. [`demo/`](https://github.com/mpasternak/ojs-mcp/tree/main/demo)\nholds the Docker stack, the fictional seed content, and the two scripts that\ndrive this server against it as a real MCP client — `check_api.py` for the\nread tools, `check_writes.py` for the write tools.\n\nThree things have **not** been exercised against a live server, and still\nrest on what the PKP source (`pkp-lib`, `pkp/ojs`) says rather than on\nobserved behavior: login/password authentication\n(`OJS_USERNAME`/`OJS_PASSWORD`), network mode (`OJS_MCP_TRANSPORT=http`),\nand OJS 3.6 — only 3.5 has been tested. The unit test suite likewise runs\nentirely against stubbed HTTP responses (via `respx`).\n\nWrite…","publisher":null,"homepage":"https://mpasternak.github.io/ojs-mcp/","repository":"https://github.com/mpasternak/ojs-mcp/blob/main/CHANGELOG.md","version":"0.2.1","license":"MIT","protocols":["mcp"],"tags":["api","llm","mcp","ojs","open-journal-systems","pkp"],"pricing":null,"endpoints":[{"url":"pypi:ojs-mcp","type":"package_pypi","auth":null,"probeable":false}],"skills":null,"tools":null,"extra":null,"attribution":{"kind":"pypi","name":"pypi","license":"pypi","repoUrl":"pypi","summary":"pypi","version":"pypi","description":"pypi","homepageUrl":"pypi"}},"derived":{"capabilities":[{"slug":"dev.version-control","name":"Version Control","confidence":0.779,"provenance":"derived"}],"categories":["dev"],"language":"en"},"observed":{"status":"unknown","statusReason":"Distributed as a package to run locally; no network endpoint to check.","lastOkAt":null,"lastProbedAt":null,"statusComputedAt":null,"reliability30d":null,"latestObservations":[],"tools":null,"package":{"name":"ojs-mcp","registry":"pypi","observedAt":"2026-09-12T08:20:44.970Z","publishedAt":"2026-09-10T10:55:25.260318Z","latestVersion":"0.2.1"},"toolSurface":null,"endpointFacts":[]},"verification":{"claimed":false,"claimedAt":null,"proofs":[]},"provenance":{"sources":[{"source":"pypi","key":"ojs-mcp","url":"https://pypi.org/project/ojs-mcp/","firstSeenAt":"2026-09-12T08:20:33.281Z","fetchedAt":"2026-09-12T08:20:33.281Z","normalizedAt":"2026-09-12T08:20:33.281Z"}]},"firstSeenAt":"2026-09-12T08:20:33.281Z","updatedAt":"2026-09-12T08:20:44.970Z"}