Using the ACE website API and MCP servers

🌐 WebsiteUpdated 1 week ago•27 views

What this gives you The ACE website exposes its wiki, its Lua API documentation, and (for signed-in team members) its dev boards over two kinds of interface:

For

Needs an account

REST API

scripts, websites, bots, anything that speaks HTTP

no

Wiki MCP server

Claude, Cursor, and other AI assistants

no

Dev board MCP server

your AI assistant reading your own tasks

yes, plus a token

Everything is read-only . There is no endpoint that writes, edits, or deletes anything, and no plan to add one without a proper authorization flow first.

Quick start Ask the wiki a question from a terminal:

curl "https://acegmod.com/api/public/wiki/search?q=penetration" Point your AI at the whole wiki — add this to your MCP config and restart the client:

{
"mcpServers": {

"ace": { "url": "https://acegmod.com/api/mcp" }

}

} That is the entire setup. No key, no signup, no rate-limit form to fill in.

The REST API Base URL: https://acegmod.com/api/public

- No authentication. No API key exists, so don't go looking for one.

- CORS is open ( Access-Control-Allow-Origin: * ), so you can call it straight from a browser page.

- 120 requests per minute per IP. Well above what a normal tool needs.

- Responses are cacheable for a few minutes at the edge. If you are polling for changes, use updatedSince rather than re-fetching everything.

- GET /api/public/wiki and GET /api/public/docs describe themselves — call them for a machine-readable list of endpoints and parameters.

Search the wiki GET /api/public/wiki/search?q=<text>&limit=<1-50> q is required and capped at 200 characters. limit defaults to 10.

{ "query": "penetration", "count": 3, "results": [ … ] } List articles GET /api/public/wiki/articles Parameter

Meaning

category

wiki folder slug

organization

org slug, or none for ACE's own wiki

updatedSince

ISO 8601 timestamp — only articles edited since then

page , limit

default page 1, 25 per page; limit max 100

Results come back newest-edit-first, so updatedSince plus paging is a complete and cheap way to keep a local copy in sync.

Read one article GET /api/public/wiki/articles/<slug> Returns the article with its body converted to plain markdown — headings, bullets, fenced code blocks and links survive; editor markup does not. Bodies over 60 000 characters come back with "truncated": true .

{
"slug": "acf-penetration",

"title": "Penetration",

"excerpt": "…",

"url": "https://acegmod.com/wiki/acf-penetration",

"category": "Mechanics",

"organization": null,

"author": "someone",

"updatedAt": "2026-07-30T12:00:00.000Z",

"views": 1234,

"mirroredFrom": null,

"body": "## Overview\n…",

"truncated": false

} Browse the folder tree GET /api/public/wiki/categories Every folder with a count of published articles in it.

Search the Lua API docs GET /api/public/docs/search?q=<text>&limit=<1-50> Searches ACE's own generated Lua documentation — function names, signatures, parameters and return values. ACE-global, non-deprecated functions only.

{ "query": "GetHitAngle", "count": 1, "results": [
{ "name": "ACF.GetHitAngle", "slug": "acf-gethitangle", "signature": "…",

"description": "…", "realm": "SHARED", "params": [], "returns": [],

"namespace": "ACF", "url": "https://acegmod.com/docs/acf-gethitangle" }

] } What you will and won't see The API serves published, non-role-restricted wiki articles belonging either to ACE or to an approved organization. Drafts, role-gated pages and articles from suspended organizations are not served — and a request for one returns 404 , the same as a slug that does not exist. That is deliberate: telling a stranger that a draft exists is itself a leak.

Mirrored partner wikis (PAC3, StarfallEx and others) are always listed and searchable, but whether their full text is republished through this API is the mirroring organization's decision — they own the licensing question, not ACE. If an org has switched that off, the article still appears with its title, excerpt, folder and a link upstream, and the response carries mirroredFrom.bodyWithheld: true . Follow the mirroredFrom.url for the text.

MCP: the wiki server MCP (Model Context Protocol) is the standard way to hand an AI assistant a set of tools. The ACE wiki server lets an assistant look things up in the wiki itself instead of guessing from whatever it happened to memorise.

Endpoint: POST https://acegmod.com/api/mcp — no authentication, because everything behind it is already public.

{
"mcpServers": {

"ace": { "url": "https://acegmod.com/api/mcp" }

}

} Where that config lives depends on your client (Claude Desktop's settings file, claude mcp add for Claude Code, your editor's MCP panel). The URL is the same in all of them.

Tools it offers Tool

What it does

wiki_search

Relevance search — the entry point for any ACE question

wiki_get_article

The full text of one article, by slug

wiki_list_categories

The folder tree, to see what the wiki covers

wiki_list_articles

Browse a folder, or see what changed recently

All four are marked read-only and unrelated to each other, so most clients will run them without stopping to ask you each time.

There is no docs tool on purpose An earlier version had one that searched the Lua API docs. It was removed because most assistants that would call it already have the ACE repository checked out, and grepping the real Lua source is faster and more accurate than a tool call returning a summary of it. A tool only earns a slot in the context window if it does something the model cannot already do cheaply. The REST endpoint ( /api/public/docs/search ) stays, for callers without the repo.

MCP: the dev board server (ACE team) If you have a dev board on the site, you can let your assistant read it.

Endpoint: POST https://acegmod.com/api/mcp/dev-board — this one is authenticated.

Getting a token
- Go to Settings → AI assistant access on the website ( https://acegmod.com/settings ). The section only appears once you have a dev board — it shows up the first time you open /dev/board .

- Create a token.

- Copy it immediately — the full token is shown once and never again.

Connecting {
"mcpServers": {

"ace-dev-board": {

"url": "https://acegmod.com/api/mcp/dev-board",

"headers": { "Authorization": "Bearer <your token>" }

}

}

}

Tools it offers Tool

What it does

devboard_list_boards

The boards this account can read, with task counts

devboard_list_tasks

Search and filter tasks across those boards

devboard_get_task

One task in full, with its checklist and comments

Most accounts see exactly one board — their personal board, which is created the first time you open /dev/board on the website. Developers see all of them.

What the token can and cannot do
- It is read-only. There is no tool on this server that changes anything.

- It inherits your roles live, on every call. It is not a snapshot of your permissions at the moment you created it. If your access changes, the token's access changes with it in the same instant.

- It sees exactly what you see. Not more.

- Tasks tagged security have their descriptions withheld even from you, because the point of the tag is that the text should not leave the site.

- Revoking is immediate. Delete the token in settings and the next call fails.

Treat it like a password: one token per machine, don't paste it into a shared config, and revoke it if a laptop goes missing. Rate limit is 60 requests per minute.

Rules of the road The API is open because keeping ACE's documentation locked up helps nobody. A few things keep it that way:

- Cache and sync, don't hammer. Use updatedSince for incremental updates instead of re-downloading the wiki on a timer.

- Send a real User-Agent with a way to contact you. If something you run starts misbehaving, that's the difference between a message and a block.

- Credit the authors. Wiki articles are written by community members, and the article response includes author and a canonical url . Link back.

- Mirrored content belongs to its original project. Respect bodyWithheld — if the flag is set, link upstream rather than working around it.

- Don't scrape around the visibility rules. If the API returns 404, the content is not public, and that is the answer.

Troubleshooting 404 on an article you can see while signed in. It is a draft, it is role-restricted, or it belongs to an organization that is not approved. The public API only serves published, unrestricted articles.

429 Too Many Requests . You have gone over 120 requests a minute (60 on the dev board server). Back off and retry; the window is one minute.

401 on the dev board server. The token is missing, mistyped, revoked or expired. Check the header is Authorization: Bearer <token> and mint a fresh token if in doubt.

503 Temporarily unavailable . An ACE administrator has switched that surface off deliberately — usually during an incident. Nothing is broken and no data is lost. The response includes a Retry-After header; come back later. Signed-in use of the website itself is unaffected while this is on.

Empty body on a mirrored article. Check mirroredFrom.bodyWithheld . The mirroring organization has chosen not to republish the text through the API; mirroredFrom.url points at the original.

Something missing? The API covers the wiki and the docs today. If you are building something that needs a surface that isn't here — builds, servers, events — say so on the forum or in Discord. It's easier to add an endpoint someone is actually going to use than to guess.

Was this article helpful?

See More

Discussion(0)

No comments yet. Be the first to ask a question!

Have a question? Sign in to join the discussion.