Parkour MCP
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| S2_API_KEY | No | Optional Semantic Scholar API key for higher rate limits. | |
| GITHUB_TOKEN | No | Optional GitHub personal access token for higher rate limits and private repo access. | |
| KAGI_API_KEY | No | Your Kagi API key. Required for Kagi search and summarize tools. Can also be configured via ~/.config/parkour/kagi_api_key. | |
| S2_ACCEPT_TOS | No | Acknowledge Semantic Scholar API license terms. Set to '1' to enable Semantic Scholar tool. | |
| PLAYWRIGHT_BROWSER | No | Override the browser engine for JS rendering. Options: webkit, chromium, firefox. | |
| MCP_ALLOW_PRIVATE_IPS | No | Set to '1' to allow fetching from private IP addresses (lowers SSRF protection). |
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
This server publishes no instructions, or was last inspected before Glama recorded them.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| Capability | Details |
|---|---|
| tools | {
"listChanged": false
} |
| prompts | {
"listChanged": false
} |
| resources | {
"subscribe": false,
"listChanged": false
} |
| experimental | {} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| kagi_searchA | Search the web using Kagi's curated search index. Use this as an alternative to web_search when it returns few or poor quality results. Kagi's index is independently curated, resistant to SEO spam, and may surface different sources. Returns compact results with snippets and timestamps — much lighter on context than web_search's summarized snippets, making it better suited for multi-query research workflows. Switch result categories via workflow= (search / images / videos / news / podcasts). Cap returns with limit=, scope with lens_id=, paginate with page=, filter by region= / after= / before=. The query string supports site: / filetype: / intitle: / inurl: filters, "exact phrases", +/- terms, boolean (A AND B) / (A OR B) grouping, and * wildcards — full operator syntax is on the query parameter. |
| web_fetch_sectionsA | List a document's section headings to understand page composition or plan targeted extraction. Returns a heading tree with anchor slugs — a cheap structural preview that avoids pulling the page body. Typical use: call this first to decide which sections of a long page are worth fetching, then follow up with web_fetch_incisive using the returned heading names as section= or slugs as slices=. URL fragments (e.g. #section-name) are resolved against the heading tree. For a quick sense of document scope, the section tree reveals structure at minimal cost and leaves the source material unsummarized for precise follow-up. For Reddit threads, returns the comment tree with author, score, and content length metadata. Comment IDs serve as section identifiers for follow-up extraction of specific subthreads. |
| web_fetch_incisiveA | Fetch and extract unsummarized content from URLs as markdown. Unlike web_fetch, fetches through the user's device instead of proxying through Anthropic's servers. Uses precise content extraction techniques and clean first-party APIs for navigating content instead of summarization. Use this for a rich content exploring experience that is not subject to 403 bans of data-center subnets, or when web_fetch is rejected with PERMISSIONS_ERROR. Targeted extraction (preferred over fetching full pages):
RECOMMENDED WORKFLOW: For pages of substantial or unknown length, call web_fetch_sections first to map the heading tree, then come back here with precise section= or slices= targets. A full-page fetch is rarely the right first move — it fills context with material you don't need and discards the structural information that makes follow-up queries cheap. For Reddit threads, web_fetch_sections returns the comment tree instead. search= operators (tantivy query language):
For Wikipedia and other MediaWiki pages, a dedicated companion tool offers footnote and inline-citation resolution that this fast path can't provide. When the target page has those reference types, the response frontmatter surfaces a see_also hint pointing at it. Always use this tool for Reddit URLs — built-in fetch tools cannot access Reddit content when proxied. Handles posts, subreddit listings, user pages, and comment permalinks; a permalink scopes output to the linked comment while caching the whole thread for follow-up section=/slices= queries. JavaScript-dependent pages: a plain fetch returns static HTML. When that comes back as an empty shell, the response frontmatter says so — retry with requires_js=true to render through a headless browser. requires_js is the heavier path; reach for it in response to that signal, not by default. Pass actions to run a ReAct interaction chain before extraction (supplying actions implies requires_js):
Supports HTML, plain text, JSON, and XML content types. |
| arxivA | Search and retrieve academic papers from arXiv. Use this for arXiv paper lookups: search by query, get paper details (abstract, authors, categories, affiliations, DOI, journal refs), or browse recent papers by category. arXiv abstract and PDF URLs are also handled automatically by web_fetch_incisive. Actions: search, paper, category. Query formats:
search operators:
Papers retrieved via the paper action are automatically tracked on the research shelf. |
| research_shelfA | Manage the research shelf — an in-memory tracker for papers inspected during research. Papers are automatically added when the following tools resolve a paper, RFC, or citable repository: arxiv, semantic_scholar, ietf, github (for repos with CITATION.cff), and web_fetch_incisive (via its DOI fast path). Use this tool to review, score, confirm, or remove tracked entries, and to export citations in BibTeX, RIS, or JSON format. Actions: list, confirm, remove, score, note, export, import, clear. Query formats:
The shelf survives context compaction within the same session. For cross-session persistence, use export json to save the shelf to a memory file, then import it in a future session. |
| githubA | Search and retrieve code, issues, pull requests, and repositories from GitHub. Use this for GitHub lookups: search issues/PRs across repositories, search for repositories by topic/stars/language, search code, get issue or PR details with comments, fetch file content from a specific ref, get repo metadata with README, or inspect a repo's custom issue submission flow (forms, markdown templates, contact-link routing) before filing a new issue. GitHub URLs are also handled automatically by web_fetch_incisive — this tool is for structured queries by owner/repo/number. Actions: search_issues, search_repos, search_code, issue, pull_request, file, repo, tree, issue_templates. Query formats vary by action:
Authentication: Set GITHUB_TOKEN env var or create ~/.config/parkour/github_token for 5000 req/hr (vs 60/hr unauthenticated). No special scopes needed for public repos. |
| huggingfaceA | Inspect HuggingFace Hub models: metadata, files, and quantization quality. Use this for model-repo lookups: architecture and parameter count, checkpoint size and shard layout, gated/private status, base-model lineage, per-file sizes and LFS checksums, and a quantization analysis that reports effective bits per weight rather than what the uploader claimed. huggingface.co URLs are also handled automatically by web_fetch_incisive — this tool is for structured queries. Actions: model, file, tree, search, org. Query formats vary by action:
Weight files are never downloaded. Asking for a .safetensors or .gguf file returns its size, LFS checksum, and the byte-range recipe for reading the header — a multi-GB shard exposes its per-tensor dtypes and shapes in a header of a few hundred KiB. On the model action, effective bits-per-weight is suppressed rather than guessed whenever the Hub's own numbers cannot support it: packed storage counts reported as parameter counts, repos shipping more than one checkpoint set, diffusers pipelines, and GGUF-only repos each get an explicit explanation instead of a misleading number. Set quant_audit=true to spend one extra request reading the base model's native weight format, which resolves several of those cases and yields a grid-preservation verdict. Authentication: optional. Set HF_TOKEN env var or create ~/.config/parkour/hf_token to reach gated and private repos and raise the rate limit. Without a token the Hub returns an identical 401 for gated, private, and nonexistent repos, and this tool reports that ambiguity rather than guessing which one it hit. |
| ietfA | Search and retrieve IETF RFCs, Internet-Drafts, and standards-track documents. Use this for RFC lookups: get RFC details (abstract, authors, status, relationship chains), search RFCs by keyword, look up Internet-Drafts, or resolve STD/BCP/FYI subseries bundles. RFC Editor and Datatracker URLs are also handled automatically by web_fetch_incisive. Actions: rfc, search, draft, subseries. Query formats:
Optional filters for search: status (ps, std, bcp, inf, exp, hist), wg (working group acronym like "httpbis" or "tls"). RFCs have native DOIs (10.17487/RFC{N}) and are automatically tracked on the research shelf when inspected. |
| packagesA | Search and inspect software packages across language ecosystems via deps.dev. Use this for package lookups: get version history, licenses, security advisories, dependency graphs, OpenSSF Scorecards, and SLSA provenance data. Covers 7 ecosystems: npm, PyPI, Go, Maven, Cargo, NuGet, and RubyGems. Actions: package, version, dependencies, project, advisory. Query formats:
Ecosystem aliases: pypi, npm, cargo/crates, go/golang, maven, nuget, rubygems/gems. For repository details (README, issues, code), use web_fetch_incisive or github. |
| discourseA | Search and browse Discourse forum topics. Use this for Discourse forum lookups: fetch a topic with all posts, search a forum, or browse recent topics. Discourse URLs are also detected automatically by web_fetch_incisive via response headers — this tool is for structured queries when you know the forum's base URL. Actions: topic, search, latest. Query formats:
The base_url parameter identifies which Discourse instance to query (e.g. 'https://meta.discourse.org'). For the topic action, base_url is inferred from the URL if not provided. No authentication required for public forums. |
| mediawikiA | Search and retrieve content from Wikipedia and other MediaWiki sites. Use this for direct Wikipedia access without resorting to web_search with site: filters. Fetches articles by title (no URL guessing), runs native full-text wiki search, and resolves footnotes/inline citations on a specific article. Wikipedia URLs are also handled automatically by web_fetch_incisive. Actions: page, search, references. PARAMETER SPLIT: unlike other dedicated tools, this one uses two primary parameters:
Query formats:
search= operators (tantivy query language):
Wiki instance via wiki= parameter:
|
| youtubeA | Fetch YouTube content via yt-dlp and youtube-transcript-api. Use this for YouTube lookups when web_fetch_incisive doesn't apply: structured metadata + description for a video, a rendered caption transcript with timing and search, a flat listing of recent uploads for a channel or items for a playlist, or a YouTube-wide search by free-text query. Actions: video, transcript, channel, playlist, search. PARAMETER SPLIT: video / transcript / channel / playlist take url=; search takes query=. Query formats:
Transcript actions:
Transcript timestamps= modes:
Auto-generated captions lack punctuation and capitalization; the 'transcript_kind' field in frontmatter signals which to expect. The chunking strategy adapts: punctuated input gets sentence-aware window cuts; unpunctuated input falls back to pause-aware time windows. Channel, playlist, and search listings use yt-dlp's flat extraction, returning stub entries with id, title, duration, and view count. Set limit= to control how many entries (default 30, max 200). When a bare channel URL is passed, the response surfaces the channel's tab list with a frontmatter hint nudging toward /videos, /shorts, etc. — pick the right tab and resubmit. Search results match what the user would see browsing youtube.com/results?search_query=... since yt-dlp routes through the same Innertube endpoint. A 'video' call returns the description. Comments live on the dedicated youtube_comments — the video frontmatter surfaces a 'see_also' pointing there when the channel reports a non-zero comment count, so callers can pivot when they want to read the conversation. Music URLs (music.youtube.com) are out of scope and will be handled by a sibling tool. No authentication required. May fail with bot-detection or PoTokenRequired errors; residential connections fare best. The fallback workaround when blocked is to set HTTPS_PROXY to a residential proxy endpoint. |
| youtube_commentsA | Read YouTube video comments: top-level overview or per-thread drill-down. Pivot from youtube when the goal is to read what viewers are saying about a video. The video tool returns the description; this tool returns the conversation. Two views, selected by whether comment_id is set:
The flow matches how a human reads YouTube comments: skim top-level statements for what people thought of the video, then drill into threads that look interesting (high score, pinned, uploader replied). URL formats accepted: same as the youtube video action — watch?v=, youtu.be/, shorts/, clip/, embed/, v/. No authentication required. Comment-fetch failures (bot detection, private video, age-restricted) surface as user-facing error strings via the same exception mapping as youtube. |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
| shelf_resource | Current research shelf contents. |
| kagi_regions_resource | Valid region codes for the kagi_search region parameter. |
| kagi_lenses_resource | Built-in Kagi lens catalog for the kagi_search lens_id parameter. |
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/blightbow/parkour-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server