A WarpEngine 1.0 óta mindaz, amit az ActiveAdmin-erőforrások tudnak, JSON API-ként is elérhető a
/api/admin/v1alatt: a katalógus a kiadásaival, assetjeivel, linkjeivel és képeivel, a státusz- és kategóriaszótár, a platformlinkek, a letöltési statisztika, a pipeline-ok, az artifact-tár és az alkalmazástokenek. Kikapcsolva érkezik, a hoszt kapcsolja be; OpenAPI 3.1 leírást ad magáról, és ugyanezeket a műveleteket MCP-szerverként LLM-ügynököknek is kiszolgálja. A katalógusolvasók olvasó oldala továbbra is a WECP.
# config/initializers/warp_engine.rb
WarpEngine.configure do |c|
c.admin_api.enabled = true
c.admin_api.mcp = true # a Gemfile-ba kell a gem "mcp"
c.admin_api.rate_limit = { to: 300, within: 1.minute } # tokenenként
end
| Kulcs | Alapérték | Jelentés |
|---|---|---|
enabled |
false |
Kikapcsolva minden Admin API-cím 404-et ad |
token_owner_class |
application_token_owner_class |
Az a modell, amelynek tokenje admin scope-ot kaphat |
authenticator |
:application_token |
Vagy egy callable, amely a kérésből WarpEngine::AdminApi::Principal-t csinál |
resources |
:all |
Vagy egy lista, például %i[softwares releases downloads]; a többi 404 |
read_only |
false |
true: minden írás 405, és kimarad a leírásból |
page_size / max_page_size |
50 / 200 |
A listák lapozása |
rate_limit |
nil |
{ to:, within: } tokenenként, a Rails.cache-ben számolva; fölötte 429 Retry-After-rel |
openapi_requires_auth |
true |
false: az OpenAPI-leírás nyilvános |
docs_ui |
false |
true: Redoc-oldal a /api/admin/v1/docs alatt (a leírás auth-szabályát követi) |
mcp |
false |
true: MCP a /api/admin/v1/mcp alatt |
mcp_exclude |
application_tokens, device_grants |
Az MCP-ből kihagyott erőforrások |
A teletypegames.org-on az 1.0.0 óta be van kapcsolva az Admin API és az MCP, AdminUser-tokenekkel.
Authorization: Bearer 3f9c…
Egy alkalmazástoken, amit az admin ad ki (App Tokens → Admin API scope), vagy maga az API. Három scope, egyik sem foglalja magában a másikat:
| Scope | Mit nyit |
|---|---|
admin:read |
minden GET |
admin:write |
minden létrehozás, módosítás, törlés, trigger, sync és fájlművelet |
admin:tokens |
az alkalmazástoken- és eszközbelépés-erőforrás, az olvasás is |
Csak olyan token kaphatja meg őket, amelynek a tulajdonosa az admin-tulajdonososztály — egy publisher tokenje sosem lesz admin token. Egy token nem adhat olyan admin scope-ot, ami neki nincs, nem adhat unrestricted-et, és nem adhat a sajátjánál későbbi lejáratot; a sajátjánál szélesebb tokent rotálni sem tud, mert a rotáció átadja az új titkot. Publikáló (update, upload) és kliens (catalog) tokent kiadhat.
perPage, needsReview).{ "data": [ … ], "meta": { "page", "perPage", "total", "totalPages", "nextPage" } }; a page és a perPage választ, a sort=title vagy sort=-createdAt rendez.{ "data": { … } }. A törlés 204-et ad.{ "error": "Validation failed", "details": { "name": ["has already been taken"] } }.WarpEngine-Version és a WarpEngine-Admin-Api: 1 fejlécet.warp_engine.admin_api.write esemény megy a principallal, a művelettel és a via értékkel (http vagy mcp), a hoszt auditnaplójához.| Erőforrás | Műveletek |
|---|---|
| Szoftverek | GET/POST /softwares, GET/PATCH/DELETE /softwares/{id} (include=releases,images,externalLinks,extras) |
| Kiadások | GET/POST /softwares/{softwareId}/releases, GET/PATCH/DELETE /releases/{id} |
| Kiadási assetek | GET/POST /releases/{releaseId}/assets, GET/PATCH/DELETE /assets/{id} |
| Külső linkek | GET/POST /softwares/{softwareId}/external_links, GET/PATCH/DELETE /external_links/{id} |
| Szoftverképek | GET/POST /softwares/{softwareId}/images, POST …/images/upload (multipart), GET/PATCH/DELETE /software_images/{id} |
| További erőforrások | GET/PATCH /softwares/{softwareId}/extras/{association} — a hoszt saját rekordjai, lásd lent |
| Szótár | /software_statuses, /software_categories, /platform_links, mindegyik GET/POST és GET/PATCH/DELETE /{id} |
| Letöltések | GET /downloads, GET /downloads/{id}, /downloads/summary, /downloads/top_files, /downloads/top_softwares, /softwares/{id}/download_stats |
| Pipeline-ok | GET /pipelines, GET/PATCH /pipelines/{id}, GET /pipelines/{id}/runs, POST /pipelines/{id}/trigger, POST /pipelines/sync |
| Fájlok | GET /files?dir=, POST /files (multipart), POST /files/directories, PATCH /files, DELETE /files?path= |
| Tokenek | GET/POST /application_tokens, GET/PATCH/DELETE /application_tokens/{id}, POST /application_tokens/{id}/rotate, GET /device_grants[/{id}] |
| Meta | GET /me — a hívó, a scope-jai és az erőforrások, amiket használhat |
A token létrehozása az egyetlen válasz, amelyben benne van a plainToken; többé nem látszik. A hoszt additional_resources elemei akkor jelennek meg az extras alatt, ha a hoszt api_schema-t ad nekik — a teletypegames.org-on ez egy szoftver SEO-metaadata.
A GET /api/admin/v1/openapi.json (vagy openapi.yaml) ugyanabból a registryből generálódik kérésidőben, amely a kéréseket routolja, így pontosan azt írja le, amit ez a hoszt kiszolgál: a kihagyott erőforrások, a read_only melletti írások, és CI vagy kliensbelépés nélkül a pipeline-ok és az eszközbelépések nincsenek benne. Minden művelet hordozza az x-required-scope-ot, és az operationId egyben az MCP-tool neve. admin:read token kell hozzá, hacsak a hoszt nem tette nyilvánossá.
c.admin_api.mcp = true mellett a POST /api/admin/v1/mcp állapotmentes Streamable HTTP MCP-szerver — nincs session, nincs stream, kérésenként egy JSON-válasz —, a hivatalos Ruby SDK-ra építve. Ugyanaz a bearer token és ugyanazok a scope-ok érvényesek.
software_list, software_update, release_create, pipeline_trigger, download_summary, admin_whoami …, ugyanazzal a JSON Schemával bemenetként és ugyanazzal a válasszal structured contentként. A sikertelen művelet tool-hiba a HTTP-státusszal.tools/list csak azt mutatja, amit a token hívhat, a resources, a read_only és a CI- és belépési feltételek után.claude mcp add --transport http warp-admin https://teletypegames.org/api/admin/v1/mcp \
--header "Authorization: Bearer 3f9c…"
A GET /api/service (WECP) admin kulcsot hordoz: null, amíg az Admin API ki van kapcsolva, különben a verziója, az url, az openapiUrl és az mcpUrl. A címek nyilvánosak; ami mögöttük van, az nem.