ManyCP is not affiliated with, endorsed by or sponsored by any directory, Docker, OpenAI, Anthropic or GitHub named here. Names are used to say which service a fact is about.
Glama is the index the awesome-mcp-servers list checks first. A server that runs from source needs one more thing there: a Dockerfile, which you add on Glama. This guide is about that Dockerfile. It has two examples to start from, the glama.json that claims the listing, and what the awesome-mcp-servers check looks for in a pull request.
Why Glama asks for a Dockerfile
Glama does not publish a page that says why, so this comes from ManyCP's own page for Glama, which follows the live submission flow and was last checked 29 Sept 2026[1]. For a server that runs from source, you add the Dockerfile on Glama. Glama's check only needs the server to start and answer introspection requests. Only servers that pass its checks are indexed.
That is all ManyCP knows about it. How Glama builds the image, and what it tests, is Glama's; nothing below says a given Dockerfile will pass.
Two Dockerfiles to adapt
Docker's best-practice page recommends pinning the base image to a version (a digest, for the strictest repeat), building in stages to keep the final image small, switching to a non-root user with USER when the service needs no privileges, and using COPY to move files between stages[7]. Both examples follow that: the base is pinned to a major version, the last stage runs as a user that is not root, the command is in list form, and there is no secret in the file. Change the paths and the start command to match your repo.
Dockerfile for a Node (npm) server, built in two stages
FROM node:22-slim AS build
WORKDIR /app
COPY package.json package-lock.json ./
RUN npm ci
COPY . .
RUN npm run build
FROM node:22-slim
WORKDIR /app
ENV NODE_ENV=production
COPY package.json package-lock.json ./
RUN npm ci --omit=dev
COPY --from=build /app/dist ./dist
USER node
CMD ["node", "dist/index.js"]
Dockerfile for a Python (pip) server
FROM python:3.12-slim
WORKDIR /app
COPY pyproject.toml README.md ./
COPY src ./src
RUN pip install --no-cache-dir .
RUN useradd --create-home app
USER app
CMD ["weather-mcp"]
An example to adapt, not build-tested against your repo. Build yours with docker build and run it once before you send it anywhere.
Keep keys out of the file. A server that needs an API key reads it from an environment variable at run time. Never write the value into the Dockerfile.
Use COPY to bring files in. The examples have no ADD.
Start the server the way your README does. The CMD line is that command, in list form.
glama.json: claiming the listing
To edit the listing yourself, add a glama.json to the root of your repo. It has a schema line and a list of the GitHub usernames who maintain the server[2][3]. Once the server is claimed, Glama's page says you can change its name and description and set up the Docker image[2]. The same page says the file is required when the repo belongs to an organisation[2].
The awesome-mcp-servers list is joined by pull request, and a workflow in the repo checks each one[4]. It runs when a pull request is opened, edited or updated[4]. It looks for the Glama score badge in your new line, and puts has-glama or missing-glama on the pull request[4]. It does the same for the language and scope emojis (has-emoji or missing-emoji), and it adds duplicate when the repo is already in the list[4].
The line it expects has the repo link, the badge, the emojis, and a one-line description. This is the shape of the lines in the list's README, with placeholders:
One entry in the README, with placeholders
- [owner/repo](https://github.com/owner/repo) [](https://glama.ai/mcp/servers/owner/repo) 📇 ☁️ - What the server does, in one sentence.
The emoji legend is at the top of the README: for example 🐍 for a Python codebase, 📇 for TypeScript or JavaScript, ☁️ for a cloud service and 🏠 for a local one[5]. Entries go in alphabetical order inside their section, one server per line[6].
List the server on Glama first, so the badge address exists.
Add the line to the right section of the README, in order.
Open the pull request yourself and watch the labels. Fix what a missing- label points at.
ManyCP fills in every field and links straight to the form. You click send. On Pro, ManyCP files it by hand for you.
The name, description and URL Glama's form asks for
A glama.json for your repo root, so you can claim the listing
You do: sign in and pass the robot check; add the Dockerfile on Glama if you run from source. ManyCP does not write your Dockerfile or promise that Glama accepts it.
When you don't need ManyCP
You have one server and a Dockerfile already. Add it on Glama yourself.
You are not going on the awesome list. Then Glama is the only place this matters.
Your server is hosted. You add it from glama.ai/mcp/connectors, and the Dockerfile is only for servers that run from source.
ManyCP helps when the same server goes to several directories and the listing text has to stay the same in all of them. It costs $19 once per server, or from $9 a month[8]. The free checker shows where a repo is listed today.