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). |
Capabilities
Features and capabilities supported by this server
| 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