API and MCP

gitmanual for code and AI agents

The same setup manuals as the website, plus search, lists and alternatives, as JSON, Markdown or MCP tools. It works without a key; a free key raises the limits and opens private repos.

Base URL
https://gitmanual.com/api/v1
MCP
https://gitmanual.com/mcp
Format
JSON (manuals also as Markdown)
Cost
Free

Your API key

Checking…

Quick start

  1. Try it, no key needed.
    curl "https://gitmanual.com/api/v1/manual?repo=ollama/ollama&os=mac&format=md"
  2. Get a free key above, for higher limits and private repos, and send it as a header:
    curl -H "Authorization: Bearer gm_your_key" \
      "https://gitmanual.com/api/v1/search?q=self-hosted&os=linux"
  3. Or add it to your AI agent as an MCP server (Claude, Cursor, VS Code and others):
    {
      "mcpServers": {
        "gitmanual": {
          "url": "https://gitmanual.com/mcp",
          "headers": { "Authorization": "Bearer gm_your_key" }
        }
      }
    }

Authentication

Both headers are optional. Without them you get everything public, at the lower limit.

HeaderValueWhat for
AuthorizationBearer gm_…Your gitmanual API key: higher limits, private repos and usage.
X-GitHub-Tokengithub_pat_…Private repos only: your own read-only GitHub token. Needs an API key too.

Keep your key out of web pages and public code: anyone with it can use your limits. If it leaks, replace it above.

Limits

No keyFree key
Requests (any endpoint or MCP tool)60 an hour1,000 an hour
…of which new repos (read from GitHub)10 a day200 an hour
Private repos (with your GitHub token)NoYes
See your usageNoYes

A new repo is one gitmanual hasn't read from GitHub before; it counts toward both limits. Over a limit, you get 429 with a Retry-After header in seconds. Need more? Get in touch.

Endpoints

All are GET, answer JSON and allow requests from any website (CORS). Pick your language once and every example follows; Send request runs it live.

GET/api/v1/manual

Get a setup manual

Everything the manual page shows for one repo: whether it runs on each system and why, downloads, install commands, step-by-step commands, the parts it needs, the before-you-start answers and how many people got it running.

One request. A repo read from GitHub for the first time also counts as a new repo.

Parameters

NameAbout
repostringRequiredowner/repo or any github.com link.
osmac | windows | linuxOnly this system. Leave out for all three.
archarm64 | x64The computer's chip, to pick the right download.
formatmdMarkdown instead of JSON, ready for an AI agent to read.

Response fields

FieldAbout
repostringowner/repo, as GitHub spells it.
privatebooleanTrue when read with your GitHub token (never saved).
difficultystringEasy, Moderate or Involved.
gotItRunningobjectHow many people said it worked or they got stuck, in all and per system.
beforeYouStartarrayIs it free, does it use paid AI, is it maintained, its track record.
systems.{os}.verdictyes | maybe | noWhether it runs on that system; headline and reasons say why.
systems.{os}.downloadsarrayReady-made files from its releases; recommended marks the best one.
systems.{os}.installCommandsarrayInstall commands from the README (Homebrew, winget, pip…).
systems.{os}.stepsarrayStep-by-step setup from source, each with its commands.
partsobjectRuntimes, tools, services and settings (.env) it needs.
curl "https://gitmanual.com/api/v1/manual?repo=ollama/ollama&os=mac" \
  -H "Authorization: Bearer gm_your_key"  # optional
Runs live, without a key (counts toward 60 an hour).
Example response
{
  "repo": "ollama/ollama",
  "description": "Get up and running with large language models.",
  "stars": 186263,
  "private": false,
  "manual": "https://gitmanual.com/ollama/ollama",
  "difficulty": "Easy",
  "gotItRunning": { "worked": 12, "stuck": 1, "bySystem": { "mac": { "worked": 7, "stuck": 0 } } },
  "beforeYouStart": [
    { "question": "Is ollama free?", "answer": "Yes", "detail": "Open source (MIT).", "tone": "yes" }
  ],
  "systems": {
    "mac": {
      "verdict": "yes",
      "headline": "Yes, there's a macOS download",
      "downloads": [{ "name": "Ollama.dmg", "url": "https://github.com/…", "arch": null, "recommended": true }],
      "installCommands": [{ "method": "Homebrew", "command": "brew install ollama", "kind": "app" }],
      "steps": [{ "title": "Install Go", "commands": ["brew install go"] }, "…"],
      "setupScript": "https://gitmanual.com/ollama/ollama/setup/mac.sh"
    }
  },
  "parts": { "runtimes": ["Go 1.24"], "tools": ["Git"], "services": [], "envVars": [] }
}
GET/api/v1/lists

List the lists

Every curated list: a theme (self-hosted apps, AI tools, command-line tools, MCP servers, ready-made downloads) on one system. ready is false while a list has fewer than four repos.

One request.

Response fields

FieldAbout
lists[].slugstringUse with /api/v1/lists/{slug}.
lists[].themestringself-hosted-apps, ai-tools, command-line-tools, mcp-servers or apps-with-a-download.
lists[].osmac | windows | linuxThe system every repo on it runs on.
lists[].reposnumberHow many repos it has (up to 60).
lists[].readybooleanFalse while it has fewer than four repos.
curl "https://gitmanual.com/api/v1/lists" \
  -H "Authorization: Bearer gm_your_key"  # optional
Runs live, without a key (counts toward 60 an hour).
Example response
{
  "lists": [
    {
      "slug": "ai-tools-windows",
      "title": "Open-source AI tools that run on Windows",
      "theme": "ai-tools",
      "os": "windows",
      "repos": 39,
      "url": "https://gitmanual.com/lists/ai-tools-windows",
      "ready": true
    },
    "…"
  ]
}
GET/api/v1/lists/{slug}

Get a list

One list and its repos (up to 60), most stars first.

One request.

Parameters

NameAbout
slugstringRequiredIn the path, from /api/v1/lists, e.g. ai-tools-windows.

Response fields

FieldAbout
title, introstringWhat the list is, ready to show people.
results[]arrayIts repos, most stars first, in the same shape as search results.
curl "https://gitmanual.com/api/v1/lists/ai-tools-windows" \
  -H "Authorization: Bearer gm_your_key"  # optional
Runs live, without a key (counts toward 60 an hour).
Example response
{
  "slug": "ai-tools-windows",
  "title": "Open-source AI tools that run on Windows",
  "intro": "LLM apps, agents and AI tools from GitHub that run on Windows, with a setup manual for each.",
  "os": "windows",
  "repos": 39,
  "url": "https://gitmanual.com/lists/ai-tools-windows",
  "results": [{ "repo": "microsoft/markitdown", "stars": 94210, "…": "…" }, "…"]
}
GET/api/v1/alternatives

Find alternatives

Whether a repo runs on a system, and up to five similar repos (by shared GitHub topics) that do. Useful when the answer is no.

One request. A repo read from GitHub for the first time also counts as a new repo.

Parameters

NameAbout
repostringRequiredowner/repo or any github.com link.
osmac | windows | linuxRequiredThe system it should run on.

Response fields

FieldAbout
runsOn.verdictyes | maybe | noWhether the repo itself runs on that system.
runsOn.headlinestringThe answer in a sentence.
alternatives[]arrayUp to five similar repos that do run there, closest first.
curl "https://gitmanual.com/api/v1/alternatives?repo=coollabsio/coolify&os=windows" \
  -H "Authorization: Bearer gm_your_key"  # optional
Runs live, without a key (counts toward 60 an hour).
Example response
{
  "repo": "coollabsio/coolify",
  "os": "windows",
  "runsOn": { "verdict": "maybe", "headline": "Yes, with extra tools on Windows" },
  "alternatives": [
    {
      "repo": "gogs/gogs",
      "description": "The painless way to host your own Git service",
      "stars": 47919,
      "manual": "https://gitmanual.com/gogs/gogs"
    },
    "…"
  ]
}

MCP server

Add https://gitmanual.com/mcp (Streamable HTTP) to any MCP client. The tools match the endpoints and answer in Markdown that agents read well. Headers are the same as the API's and optional.

ToolInputsWhat it does
get_setup_manualrepo, os?, arch?A repo's setup manual, as Markdown.
get_setup_scriptrepo, osOne script that sets the repo up (bash or PowerShell).
search_reposquery?, os?, language?, difficulty?, sort?, rising?, page?Search the shelf.
get_listslug?A curated list, or all of them.
find_alternativesrepo, osSimilar repos that run on a system.
{
  "mcpServers": {
    "gitmanual": {
      "url": "https://gitmanual.com/mcp",
      "headers": { "Authorization": "Bearer gm_your_key" }
    }
  }
}

Postman, Swagger and code generators

The whole API is described in one OpenAPI file, so you can explore it in your own tools or generate a client in any language.

PostmanImport → Link, and paste the OpenAPI link.
SwaggerEvery endpoint with a form to try it.Open in Swagger Editor ↗
OpenAPI fileFor code generators and AI agents.openapi.json ↗

Private repos

  1. Make a fine-grained GitHub token with Contents: Read-only, for just the repos you want.
  2. Send it as X-GitHub-Token, together with your API key:
    curl -H "Authorization: Bearer gm_your_key" \
      -H "X-GitHub-Token: github_pat_…" \
      "https://gitmanual.com/api/v1/manual?repo=your-org/internal-app&format=md"

Public repos ignore the token. A private repo is read for that request only: the answer says "private": true, and it's never saved, cached or sent to an AI service. On the website, use Private repos instead.

Errors

Errors are JSON with a message you can show people: { "error": "That API key isn't valid. …" }

StatusNameWhen
400Bad requestA parameter is missing or not one of the allowed values.
401UnauthorizedThe API key is wrong, or a private repo was asked for without one.
403ForbiddenThe API key has been turned off.
404Not foundNo such repo or list, or the repo is private and no GitHub token (or the wrong one) was sent.
429Too many requestsOver a limit. Retry-After says how many seconds to wait.
500Server errorSomething broke on our side. Try again in a moment.

What a key stores

Your GitHub username and account number, when the key was made and last used, and how many requests it has made. The key itself is stored only as a fingerprint (a SHA-256 hash), so it's shown to you once. Signing in gives gitmanual no access to your repos. Delete the key above any time; see the privacy policy.