Repository navigation
Add the Strapi 5 read-only adapter (#982) - #1307
Merged
Merged
Conversation
Add a Strapi 5 REST Content API adapter with three read-only tools: health, list documents (fields, filters, sort, pagination, populate, locale, status), and get one document by its documentId. Include the static and gated live test suite, the connector logo, and the regenerated catalog and quoted adapter counts (561 adapters, 27 keyless).
YYDW-1211
requested review from
D3nisty,
helpcodeai and
mirkopoloni
as code owners
October 28, 2026 03:58
|
👋 Welcome, @YYDW-1211, and thanks for opening your first PR on AnythingMCP! A few quick pointers:
Someone from the core team will look at this within ~48h. If you don't hear back, please ping us in Discussions / Q&A. ⭐ While you wait — if you find AnythingMCP useful, a star helps others discover it. |
|
All contributors have signed the CLA ✍️ ✅ |
Contributor
Author
|
I have read the CLA Document and I hereby sign the CLA |
Contributor
|
Thanks @YYDW-1211, merged. The adapter is clean and the testing notes were very useful, including the two baseline failures you reported honestly. It will go out with the next release. |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to subscribe to this conversation on GitHub.
Already have an account?
Sign in.
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Adds a read-only adapter for the Strapi 5 REST Content API (claimed in #982). The catalog had no Strapi connector, so this also bumps the quoted adapter counts to 561.
What the adapter does
strapi_healthGET /_healthstrapi_list_documentsGET /api/{contentType}fields,filters,sort,pagination(page / pageSize / withCount),populate,locale,status; keepsdataandmetaso pagination survives the response transform.strapi_get_documentGET /api/{contentType}/{documentId}documentId, withfields,populate,locale.Design decisions:
STRAPI_URLis the root URL (https://cms.example.com), never with an/apisuffix; the tool paths add/apithemselves.articles), anddocumentIdis the Strapi 5 identifier, not the legacy numeric id. Strapi has no public endpoint to enumerate collection types, so the adapter asks for a known ID instead of pretending to discover them.STRAPI_API_TOKENis sent only inAuthorization: Bearer. It never enters a query string, a tool argument, or a log; the live test sanitises failures for the same reason.contentTypeanddocumentIdare percent-encoded before they reach the path, so values with/,?,#or spaces cannot change the route.Deployment behaviour
SSRF_ALLOWED_HOSTS, because the outbound guard blocks private address space by default. The adapter instructions say this explicitly.Files
packages/backend/src/adapters/intl/strapi.json(new)packages/backend/src/adapters/intl/strapi.live.spec.ts(new)packages/frontend/public/logos/connectors/strapi.svg(new)packages/backend/src/adapters/catalog.ts,CITATION.cff,README.md,README.de.md,README.ja.md,README.zh-CN.md,glama.json,llms.txt,llms-full.txt,package.json,server.json(generated / count updates)catalog.ts,llms.txtandllms-full.txtcome from the repo scripts; nothing generated was edited by hand. The English README banner said "25 of them with no API key" while the checker counts 27, so it now says 27 like the other languages. The release version is unchanged at 0.51.2.Testing
Run on Windows with Node 24.18.0 / npm 11.16.0, against this branch (output copied, not paraphrased).
node scripts/validate-adapters.mjs --warn->Validated 575 adapters: 575 passed, 0 failed, 1442 total warnings.The 1442 warnings are pre-existing repo-wide; none belong tointl/strapi.json.node scripts/regenerate-catalog.mjs->Regenerated ... 575 adapters across 15 regions.with no furthergit diffoncatalog.ts, so the committed file is exactly the generator output.node scripts/adapter-count.mjs --check->OK: every quoted count equals 561 adapters (27 keyless, 8674 tools).node scripts/generate-llms-txt.mjs --check-> exit 0, generated AI docs up to date.npx jest src/adapters/intl/strapi(inpackages/backend) -> 1 suite passed, 14 passed / 7 skipped (the 7 skipped are the live block).npm run lint:check(inpackages/backend) -> 0 errors, 11 warnings, all in files this PR does not touch.npx tsc --noEmit -p tsconfig.json(inpackages/backend) -> clean.npx jest src/adapters/catalog.spec.ts src/adapters/catalog-summary.spec.ts src/adapters/catalog-search.spec.ts src/adapters/catalog-url-match.spec.ts src/adapters/env-var-meta.spec.ts src/adapters/setup-guide.spec.ts src/adapters/adapters.service.spec.ts src/mcp-server/tool-annotations.spec.ts src/mcp-server/error-hints.spec.tsKnown failures in the full backend suite
npm testinpackages/backendfinished withTest Suites: 2 failed, 4 skipped, 795 passed, 797 of 801 totalandTests: 3 failed, 1622 skipped, 23611 passed, 25236 total(1722 s). I am not claiming a fully green suite.src/common/ssrf.util.spec.ts- known baseline failure, unrelated to this PR, deliberately not modified. On this machineno-such-host.invalidresolves instead of failing withENOTFOUND, so the expectedHost not found: ...rejection never happens. It reproduces when that file runs alone (1 failed, 28 passed).src/adapters/intl/figma.live.spec.ts- 2 tests exceeded the 5 s Jest timeout under the load of ~800 suites; one timed-out call then leaked into the next assertion. The same file passes on its own (npx jest src/adapters/intl/figma.live.spec.ts-> 14 passed, 8 skipped), and this PR does not touch Figma.Live tests
Live calls require
RUN_STRAPI_LIVE=1and aSTRAPI_URL/STRAPI_API_TOKENpair, and the suite asserts the target ishttp://localhost:1337(a local Strapi 5 fixture with anarticlescollection) before the first request. They are skipped by default, were not pointed at any production instance, and no token is stored in the repo, the logs or this PR.Notes
cc @keysersoft