arcade.ly now has an MCP server
arcade.ly now has an MCP server. If you use an AI assistant or agent that supports MCP you can point it at https://arcade.ly/mcp and ask it about the site directly: which games there are, how to play them, who’s top of the hiscore tables, and what I’ve been writing about on here.
It’s free, read-only, and there’s no sign-up or authentication required. Everything you need to connect is on the MCP server page, which you’ll also find in the links at the bottom of every page.
Why bother?
I mean, honestly, it’s just a bit of fun really. There is no serious value to having an MCP server for this site, but not everything needs to be serious.
More and more people are finding things by using AI assistants and asking LLMs rather than searching, so I figured why not make it easy for them to find stuff on here. Whether anyone will actually use it or not, whether or not it’s useful for a small web personal site, is an entirely different matter.
But I’m a tinkerer, I like to experiment with things and, ultimately, this is just a bit of fun. Just like my plan to create a gopherspace version of the arcade.ly site is as well.
What can it do?
The server has four tools, all read-only:
list_gameslists the games - currently Shoot The Rocks and Star Citadel - with what each is an homage to, where to play it, and its keyboard and touch controls.get_hiscoresreturns the best scores on a game’s hiscore table, for either its Modern or its Classic variant.list_blog_postslists the posts on this blog, newest first, optionally only those with a particular tag.get_blog_postreturns a post in full, as Markdown.
So you can ask things like “What’s the top score in Star Citadel?”, “How do I hyperspace in Shoot The Rocks?” or “What has Bart written about perceived performance?”, and get an answer that comes straight from the site, rather than from whatever a model happened to pick up in training.
In Claude Code, for example, connecting takes one command:
claude mcp add --transport http arcadely https://arcade.ly/mcp Making sure it can’t slow the site down
My main concern has been ensuring the MCP server, or attempts to abuse it, don’t impact the rest of the site. In particular, nobody reading my blog or playing games should ever notice the MCP server exists. arcade.ly runs on a single, modest host, and the last thing I want is an enthusiastic agent somewhere hammering an endpoint while somebody’s trying to load Shoot The Rocks so they can beat their high score.
So the server is built to cost as little as possible:
- It answers everything from memory. The site already keeps each game’s hiscore table in memory, so the MCP server reads those, and never asks the backing database for anything. The blog posts come from an index that’s generated every time the site is built, and loaded once when the server starts. None of the tool calls touch storage volumes or the database, although I do count them just to see if anyone is using the MCP (I DO NOT record any personally identifiable information or do any tracking though - it’s literally just counting them).
- It’s stateless. Every request gets a fresh server instance and a single JSON response. There are no sessions, no cookies, and no long-lived streams.
- It’s rate limited twice: 30 requests a minute from any one address, and a separate limit across all clients together, so even in the unlikely event of loads of clients connecting at once, and assuing they’re all behaving politely and sticking within the rate limit, they can’t add up to a problem in aggregate.
I also rebuild the content index every deploy, so the server never goes stale: new posts appear immediately.
Not just MCP
While I was at it I made the rest of the site a bit friendlier to LLMs too:
- There’s now an llms.txt, following the llms.txt convention: a plain summary of what the site is and where to find things. The blog has its own, listing every post, which is regenerated on every build. This isn’t a widely used standard at present so we’ll see where it goes: maybe it’ll get some traction, maybe it’ll die and I’ll remove support for it in future.
- The sitemap is now regenerated on every build as well. This is something that I somehow broke some time ago when updating the build and CI processes.
robots.txtnow names the AI crawlers explicitly, separating assistants that fetch a page because someone asked about it from crawlers that collect training data. I treat them the same at the moment, but that might change in future.
I’m somewhat ambivalent about what to do about the training crawlers as I haven’t fully understood whether, if the site content is in a model’s training data, that makes it more likely to be recommended by an assistant or not (and bearing in mind there’s no way to directly link something an LLM spits out due to its training back to its source). So for now I’m still allowing them to access the site but, if the load becomes too heavy, I might change that.
Try it
Add https://arcade.ly/mcp to your assistant of choice, and ask it something. If something doesn’t work, or there’s something you’d like it to do that it doesn’t, please get in touch.
Filed Under
Category:AI
Tags:ai · llms · mcp · agents · node.js · performance
I'd love to hear your views.
You can drop me a line, or write your own post and send me a link. Anything interesting I receive I'll add here.