Skip to main content
Glama
WikiPeatia MCP Server

WikiPeatia MCP Server

by BerkayCelk

WikiPeatia MCP Server

License: MIT Python 3.10+ MCP

An MCP server that gives AI assistants access to WikiPeatia -- a community wiki and full-text corpus of Ray Peat's work on bioenergetic health -- plus Ray Peat's original articles on raypeat.com.

32 tools · no API keys · read-only · works with any MCP client (Claude Desktop, Claude Code, Cursor, Windsurf, Hermes, ...).

The server itself is a single Python file: server.py (FastMCP over stdio, ~1,000 lines). Everything else in this repo is documentation, packaging and tests.

What it gives your assistant

  • Search the entire Ray Peat corpus (~7,000 documents / ~220,000 text chunks): articles, books, interviews (audio transcripts), newsletters, forum posts, email Q&A and wiki pages.

  • Hybrid retrieval: full-text search, semantic (embedding) search, and LLM-powered Q&A -- a quick grounded answer mode plus a deep multi-source synthesis mode with citations.

  • Read & explore the WikiPeatia wiki: pages, sections, categories, the Library namespace (Ray Peat's books / newsletters), backlinks, recent changes, random pages.

  • Read Ray Peat's original articles from raypeat.com.

Related MCP server: knowledgehub

Quick start

Option A -- run with uvx (no install)

uvx --from git+https://github.com/BerkayCelk/wikipeatia-mcp wikipeatia-mcp

(uv will fetch and run the server; it speaks MCP over stdio.)

Option B -- clone and run

git clone https://github.com/BerkayCelk/wikipeatia-mcp
cd wikipeatia-mcp
pip install -r requirements.txt
python server.py

Client setup

Claude Desktop (claude_desktop_config.json):

{
  "mcpServers": {
    "wikipeatia": {
      "command": "uvx",
      "args": ["--from", "git+https://github.com/BerkayCelk/wikipeatia-mcp", "wikipeatia-mcp"]
    }
  }
}

Claude Code:

claude mcp add wikipeatia -- uvx --from git+https://github.com/BerkayCelk/wikipeatia-mcp wikipeatia-mcp

Cursor (~/.cursor/mcp.json) and Windsurf: same JSON shape as Claude Desktop. Hermes: add to your config.yaml under mcp_servers (see examples/hermes_config.yaml).

Ready-made config files live in examples/.

For AI agents (automated setup)

Written so an AI coding agent (Claude Code, Codex, Cursor, Hermes, ...) can install and verify this server on its own.

1. Install command (no clone needed):

uvx --from git+https://github.com/BerkayCelk/wikipeatia-mcp wikipeatia-mcp

2. Register with a client:

  • Claude Code:

    claude mcp add wikipeatia -- uvx --from git+https://github.com/BerkayCelk/wikipeatia-mcp wikipeatia-mcp
  • Claude Desktop -- merge into claude_desktop_config.json (~/Library/Application Support/Claude/ on macOS, %APPDATA%\Claude\ on Windows, ~/.config/Claude/ on Linux):

    {"mcpServers": {"wikipeatia": {"command": "uvx", "args": ["--from", "git+https://github.com/BerkayCelk/wikipeatia-mcp", "wikipeatia-mcp"]}}}
  • Cursor -- same JSON in ~/.cursor/mcp.json (project scope: .cursor/mcp.json).

  • Hermes -- see examples/hermes_config.yaml.

  • Any other MCP client -- register this stdio command: uvx --from git+https://github.com/BerkayCelk/wikipeatia-mcp wikipeatia-mcp

3. Verify (no client needed):

printf '%s\n' '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2025-06-18","capabilities":{},"clientInfo":{"name":"probe","version":"0"}}}' | uvx --from git+https://github.com/BerkayCelk/wikipeatia-mcp wikipeatia-mcp | head -c 400

Expect JSON containing "serverInfo":{"name":"wikipeatia".

4. Usage notes for agents:

  • Research questions -> corpus_search / corpus_semantic_search (hybrid search over the full corpus).

  • Quick answer -> corpus_ask; deep multi-source synthesis (30-120 s) -> corpus_deep_ask.

  • Scope a search with doc_type, author, series; ray_only=false includes all authors (Georgi Dinkov, Danny Roddy, ...).

  • Read-only, no API keys; avoid tight request loops (the upstream API rate-limits bursts).

5. Copy-paste prompt for users:

Set up the WikiPeatia MCP server for me: register uvx --from git+https://github.com/BerkayCelk/wikipeatia-mcp wikipeatia-mcp as a stdio MCP server named wikipeatia in my client config, restart/reload the client, then verify by calling the corpus_health tool.

Tools (32)

Wiki (17)

Tool

Description

wiki_search

Search wiki pages (title/content)

wiki_get_page

Raw page content (wikitext or HTML)

wiki_get_page_summary

First-paragraph summary

wiki_read

Read a page as plain text (whole page or one section)

wiki_suggest

Title autocomplete

wiki_list_categories

All categories

wiki_get_category_members

Pages in a category

wiki_list_all_pages

All pages, optional prefix filter

wiki_list_library

Library namespace (books/newsletters)

wiki_get_page_categories

Categories of a page

wiki_get_page_links

Outgoing links

wiki_get_backlinks

Pages linking here

wiki_get_page_sections

Section headings (ToC)

wiki_get_page_info

Page metadata

wiki_get_random

Random page(s)

wiki_get_recent_changes

Recent edits

wiki_get_site_stats

Wiki statistics

Corpus (12)

Tool

Description

corpus_search

Full-text search (filters: doc_type, author, series, ray_only)

corpus_semantic_search

Semantic/embedding search + glossary terms (same filters)

corpus_ask

Quick LLM answer (~2-10 s)

corpus_deep_ask

Deep LLM synthesis with [S1][S2] citations (~30-120 s)

corpus_suggest

Autocomplete (terms + doc_ids)

corpus_get_doc

Full document content (chunks; speaker/timestamps for interviews)

corpus_list_doc_types

Document types + counts

corpus_list_authors

Authors + counts

corpus_list_series

Series/collections

corpus_library

Browse library metadata (filter by series)

corpus_topics

Topic tags

corpus_health

Corpus status (docs, chunks, semantic online?)

Ray Peat articles (3)

Tool

Description

raypeat_list_articles

List all raypeat.com articles

raypeat_read_article

Read one article (full text)

raypeat_search_articles

Search article titles

Example prompts

  • "Search the corpus for what Ray Peat wrote about PUFA and insulin resistance." → corpus_search(query="PUFA insulin resistance", limit=10)

  • "Only interviews from the Ask the Herb Doctor series." → corpus_search(query="thyroid", series="Ask the Herb Doctor", doc_type="interview")

  • "What has Georgi Dinkov said about serotonin?" (non-Peat author) → corpus_search(query="serotonin", author="Georgi Dinkov (Haidut)", ray_only=false)

  • "Explain the Randle cycle in Ray Peat's framework." (deep synthesis) → corpus_deep_ask(question="Explain the Randle cycle...")

  • "Open the Thyroid entry in the Library namespace." → wiki_read(title="Library:Thyroid")

Environment variables

Variable

Default

Meaning

WIKIPEATIA_TIMEOUT

30

HTTP timeout (seconds) for regular calls

WIKIPEATIA_DEEP_TIMEOUT

120

HTTP timeout for semantic / ask endpoints

Notes

  • No API keys, read-only. The server calls public endpoints of wikipeatia.org and search.wikipeatia.org; be considerate (avoid tight loops -- the upstream API rate-limits bursts).

  • corpus_deep_ask can take 30-120 s. Prefer corpus_ask when you just need a fast answer.

  • The corpus includes third-party authors (Georgi Dinkov, Danny Roddy, forum members, ...). Use ray_only / author / series filters to scope a search.

  • This is an unofficial community project, not affiliated with WikiPeatia or raypeat.com. Content rights belong to the respective sources.

Development

uv run --with fastmcp --with httpx python smoke_test.py

The smoke test spawns the server over stdio and exercises a handful of live calls.

License

MIT -- see LICENSE.

Credits

Available Tools

32 tools
corpus_askCorpus AskA

Quick LLM-grounded answer over the corpus (fast, roughly 2-10 s).

Returns a short synthesized answer with a confidence value and the cited chunks. For deep multi-source research with [S1][S2] citations, use corpus_deep_ask instead.

Inputs: question (required). Returns: object

corpus_deep_askCorpus Deep AskA

Deep, LLM-assisted question answering over the entire corpus.

Synthesizes across all ~220K chunks; the answer carries [S1], [S2]... source markers. Open the underlying documents with corpus_get_doc(doc_id).

Note: this endpoint is slow (30-120 s). Ask one question at a time.

Inputs: question (required). Returns: object

corpus_get_docCorpus Get DocA

Fetch a document's full content (chunk by chunk).

Interview chunks carry speaker and timestamp_start fields; use audio_url / source_url to reach the audio source.

Inputs: doc_id (required), max_chars_per_chunk. Returns: object

corpus_healthCorpus HealthA

Status and stats of the corpus search infrastructure.

Returns: mode (hybrid), semantic_live (embedding search online), chunk_count, doc_count

Inputs: no named parameters. Returns: object

corpus_libraryCorpus LibraryA

Browse the corpus library (metadata list). For content use corpus_get_doc.

Inputs: limit, series, extended. Returns: object

corpus_list_authorsCorpus List AuthorsC

Authors in the corpus and their document counts.

Inputs: extended_only. Returns: object

corpus_list_doc_typesCorpus List Doc TypesA

Document types and counts in the corpus (article, book, interview, ...).

Usable as the doc_type filter in corpus_search.

Inputs: no named parameters. Returns: object

corpus_list_seriesCorpus List SeriesA

Series / collections in the corpus (e.g. 'One Radio Network', 'Ray Peat Newsletter', 'Ask the Herb Doctor').

Matches the 'series' field in corpus_search results; usable as a filter.

Inputs: no named parameters. Returns: object

corpus_suggestCorpus SuggestB

Corpus autocomplete: term and document (doc_id) suggestions.

Inputs: query (required). Returns: object

corpus_topicsCorpus TopicsA

List the corpus's topic tags (e.g. 'thyroid', 'pufa', 'cortisol').

Useful to see what themes the corpus is organized around.

Inputs: no named parameters. Returns: object

raypeat_list_articlesRaypeat List ArticlesA

List all of Ray Peat's articles on raypeat.com.

Returns: Article list with titles and URLs.

Inputs: no named parameters. Returns: object

raypeat_read_articleRaypeat Read ArticleC

Read one of Ray Peat's articles as full text.

Inputs: path (required). Returns: object

raypeat_search_articlesRaypeat Search ArticlesB

Keyword search across Ray Peat article titles.

Inputs: query (required). Returns: object

wiki_get_category_membersWiki Get Category MembersC

List all pages in a category.

Inputs: category (required), limit. Returns: object

wiki_get_pageWiki Get PageC

Get the raw content of a wiki page.

Inputs: title (required), format. Returns: object

wiki_get_page_categoriesWiki Get Page CategoriesB

Show which categories a page belongs to.

Inputs: title (required). Returns: object

wiki_get_page_infoWiki Get Page InfoC

Page metadata: last edit, length, last revision id, URLs.

Inputs: title (required). Returns: object

wiki_get_page_sectionsWiki Get Page SectionsB

List a page's section headings (table of contents).

Inputs: title (required). Returns: object

wiki_get_page_summaryWiki Get Page SummaryA

Get the first paragraph (intro extract) of a wiki page. Fast overview.

Inputs: title (required). Returns: object

wiki_get_randomWiki Get RandomB

Get random wiki page(s). Great for exploration.

Inputs: count. Returns: object

wiki_get_recent_changesWiki Get Recent ChangesB

List recent edits on the wiki.

Inputs: limit. Returns: object

wiki_get_site_statsWiki Get Site StatsB

Wiki statistics: pages, edits, users, files.

Inputs: no named parameters. Returns: object

wiki_list_all_pagesWiki List All PagesB

List all wiki pages alphabetically, optionally filtered by prefix.

Inputs: limit, prefix. Returns: object

wiki_list_categoriesWiki List CategoriesC

List all categories on the wiki.

Inputs: limit. Returns: object

wiki_list_libraryWiki List LibraryA

List all pages in the Library namespace ('Library:').

Ray Peat's books / newsletters / canonical texts live here. Read one with wiki_read('Library:01 Radiation And Growth', ...).

Inputs: limit. Returns: object

wiki_readWiki ReadC

Read a wiki page as plain text. With a section number, only that section.

Inputs: title (required), section. Returns: object

wiki_suggestWiki SuggestC

Autocomplete wiki page titles while typing.

Inputs: query (required). Returns: object

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

Loading tool schema changelog…

    TDQS

    B3.1/5.0

    Scored across 32 tools

    Disambiguation4/5

    Tools are mostly separable by prefix and resource, and descriptions explicitly distinguish similar ones (wiki_search vs corpus_search, corpus_ask vs corpus_deep_ask). However, there is still notable overlap among search/retrieval tools across wiki, corpus, and raypeat, which could cause occasional misselection.

    Naming Consistency4/5

    All names use snake_case with consistent domain prefixes (wiki_, corpus_, raypeat_), and most follow prefix_verb_noun. Minor deviations like wiki_read and noun-only corpus_health/corpus_library are readable and do not break predictability.

    Tool Count2/5

    32 tools is heavy for a single MCP server, even across three related domains; many retrieval/search variants could be consolidated or more clearly grouped. The count exceeds the recommended 15-tool range and increases selection burden.

    Completeness4/5

    The surface covers search, retrieval, metadata, discovery, QA, article listing, and corpus stats extensively, leaving few obvious retrieval gaps. It is read-oriented, so missing write/edit operations are acceptable for the apparent research purpose.

    Maintenance

    ActivityNo data
    ResponsivenessOutdated data

    Related MCP Connectors

    Related MCP Servers