mcp server
lesswrong-mcp
Read-only research tools for LessWrong and the Alignment Forum: posts, discussions, people, wiki tags, sequences, links, reactions, edit history and search.
Set up
Runs on your computer. Pick your agent and operating system.
This project does not publish an install method we can turn into a config. Follow the README instead.
README
synced Oct 26, 2026LessWrong and Alignment Forum Research
A read-only extension for Claude Desktop that lets Claude research LessWrong and the Alignment Forum.
What it is
This extension gives Claude read-only research access to LessWrong (LW) and the Alignment Forum (AF) in Claude Desktop. It offers what the two sites show to a logged-out visitor, shaped for research on AI-safety discussions: posts and whole discussions, people, wiki pages, sequences, links between posts, reactions, edit history and search. It is built for one user, its owner.
- It only reads. It never writes, votes, posts or reacts, and it never shows what the sites deliberately hide from logged-out readers (see "Deliberate exclusions").
- It has 16 tools, each shaped like a research task. Each of the six example questions below takes one or two calls.
- It sends only two kinds of request,
POST /graphqlandPOST /api/search, both towww.lesswrong.com; it never contacts the Alignment Forum's own host. How often and how much it asks is under "Politeness and privacy". - It has no affiliation with the operators of LessWrong or the Alignment Forum. It uses no logos or other branding of either site, and its name only says which sites it reads.
- The design behind it, and what is known about how the forum behaves, are in
docs/.
Install
- Download the extension file
lesswrong-mcp-1.0.0.mcpbfrom the Releases page, or build it yourself (see "Development"). - Open
lesswrong-mcp-1.0.0.mcpbin Claude Desktop (for example by double-clicking it) and confirm the installation. - Start a conversation. The 16 tools are available to Claude, and there is nothing to configure.
Claude Desktop shows this extension as unsigned; that is expected.
Requirements:
- Claude Desktop on macOS or Windows (the platforms for which it ships its own Node.js).
- The extension runs on the Node.js that Claude Desktop ships, so you need no separate installation. It declares Node.js 20 or later (
>=20.0.0in the manifest); Node.js 22 or later is recommended, and the version in use is logged to stderr at startup.
Using it: the six example questions
Claude chooses the calls itself; these are the sequences the tools were designed around. Where you already have a URL or an id, the find step is not needed.
- "Summarize the main disagreements in the comments on AGI Ruin: A List of Lethalities."
find {items: [{kind: "post", query: "AGI Ruin: A List of Lethalities"}]}gives the best match,post_id uMQ3cqWDPHhjtiesc.get_comments {post: "uMQ3cqWDPHhjtiesc", sort: "contested", max_tokens: 40000}gives the counts, a block of disagreement signals (disagree reactions, split agreement or karma votes, back-and-forth exchanges, each with itscomment_idanduser_slug), the crux and changed-mind marks, the most contested threads in full, and one line for each remaining thread.- Optionally
get_comments {post: "uMQ3cqWDPHhjtiesc", sort: "top", max_tokens: 40000}for the most upvoted threads, or the cursor for more.
- "Who replied to Paul Christiano's comment on AGI Ruin, and did he answer back?"
find {items: [{kind: "post", query: "AGI Ruin: A List of Lethalities"}, {kind: "user", query: "Paul Christiano", commented_on: "item:1"}]}finds the post andpaulfchristiano, matched among that post's commenters.get_comments {post: "uMQ3cqWDPHhjtiesc", user: "paulfchristiano"}gives a reply map: each of his comments, each direct reply with its ids, and whether he replied back; then the threads he is in, with his comments marked.- To read one reply in context:
get_comments {comment: "<comment_id from the map>"}.
- "What did an author post about interpretability in 2024, best-received first?"
find {items: [{kind: "user", query: "<author name>"}, {kind: "tag", query: "interpretability"}]}gives the author'suser_slugand the tag candidates.list_posts {user: "<user_slug>", tag: "interpretability-ml-and-ai", date_from: "2024", date_to: "2024", sort: "top", limit: 20, query: "interpretability"}lists the tagged posts by karma, then up to 10 untagged posts that match the word. Addaf_only: true, sort: "af_top"for the Alignment Forum view.
- "Who first used the term 'mesa-optimizer' on LessWrong, and was it in the original version of that post?"
first_use {forms: ["mesa optimizer", "mesa optimizers", "mesa optimization"], limit: 5}searches oldest first, checks the edit history of the earliest candidates and names the earliest verified use, whether it was present at publication, and why earlier-looking hits were rejected.- To quote it:
get_history {post: "<post_id>", revision: "original", match: "mesa optimizer"}.
- "What's on Axel Højmark's profile, and what have they been commenting on lately?"
find {items: [{kind: "user", query: "Axel Højmark"}]}givesaxel-hojmark. Accents matter: "Axel Hojmark" without the ø finds someone else.get_user {user: "axel-hojmark"}gives the profile, counts, bio, links, top and latest posts, the latest comments with their posts and who they reply to, sequences and recent wiki edits; each section ends with the call that continues it.- More comments:
list_comments {user: "axel-hojmark", cursor: "c_…"}from that hand-off continues after the ten already shown.
- "What does the Interpretability wiki page say, and what are its top posts?"
find {items: [{kind: "tag", query: "interpretability"}]}gives the tag candidates; wiki-only pages are labelled.get_tag {tag: "interpretability-ml-and-ai"}gives the page type, parent and subtags, lenses, summaries, likes, the discussion count, the 10 highest-karma tagged posts, and the wiki text with an outline.- Optionally
get_tag {tag: "interpretability-ml-and-ai", sort: "tag_relevance"}for the most strongly tagged posts, orget_reactions {tag: "interpretability-ml-and-ai"}for who liked the page.
The 16 tools
Each paragraph below names every parameter the tool accepts; the shared conventions after the last tool apply to all of them.
find
Resolves names to exact identifiers, several in one call. items is required: 1 to 5 objects {kind, query, commented_on?}, resolved independently, where kind is post (a title), user (a display name), tag (a topic, tag or wiki page name) or sequence (a sequence, book or collection title), query is the name to resolve, and commented_on (only on user items) is a post identifier or item:N, the best match of item N of the same call counting from 1, so that post's commenters are matched first. af_only keeps Alignment Forum posts and sequences and, for user items, AF members. limit counts candidates per item; cursor and max_tokens are the shared paging parameters. Each candidate has its ids and enough detail to choose, labelled by how it matched (identifier, exact title, exact name, commenter on the post, slug, old slug, alias, search); "best match" is marked only when one candidate is clearly right, and otherwise you choose from the list. find also searches the long forms of common abbreviations (see the table under "Things the forums do that you should know").
search
Full-text search of posts, comments, people, wiki pages and sequences. kind is post (the default), comment, user, tag or sequence. query is matched loosely; phrases are exact phrases that must all occur in the same item; exclude lists single words to leave out. Filters are user (the primary author), tag, post (comments on one post), af_only, and date_from and date_to (posts and comments only). sort is relevance (the default), new, old or top; sequences take every order but top, and wiki pages and tags only relevance. limit counts hits; cursor and max_tokens page the reply. Every hit is re-read from the forum and checked here against the phrases; the match count is the forum's loose count, results stop 10,000 deep, and one of query or phrases is required unless a filter is combined with sort new, old or top.
get_post
Reads one post: metadata, status, structure and text. post is required (an id, a URL or the exact current slug). The header gives authors, dates, karma and votes, AF status, the comment count, status flags, tags with relevance, Annual Review results and review comments, the approved glossary, related questions, the best answer and the canonical sequence with neighbours. section reads one numbered section of the outline; match keeps only the paragraphs containing a text (not together with section); include_body (default true) set to false returns everything but the text; cursor and max_tokens page a long body. Interactive widget code is omitted, dialogues show speaker names, and editing suggestions the author never accepted are removed where the forum's HTML confirms them. There is no limit: the reply is one post.
get_comments
Reads a discussion as ranked, labelled threads, ready for summarizing. Give exactly one of post (the whole discussion), comment (the thread containing it) or tag (a wiki page's discussion). sort is top (the default), af_top, new, old, largest, contested or active; limit counts threads (with match, matching comments); user keeps the threads that person wrote in, marks their comments and adds a reply map; match keeps only comments containing a text; af_only keeps threads with at least one AF comment, whole. The first page also lists the strongest disagreement signals and the comments readers marked as cruxes or as having changed their mind. cursor and max_tokens page the reply. Comments that are not public are missing (see "Comments awaiting review" under "Things the forums do that you should know").
list_posts
Lists posts with filters, best first or by date. user (their own and coauthored posts), tag (posts readers tagged with it), date_from and date_to (posting date), af_only, curated_only, frontpage_only, questions_only and min_karma are the filters. sort is top (the default when tag is given), new (the default otherwise), old, active, tag_relevance (needs tag), curated_date (needs curated_only) or af_top (needs user or tag). query (only with tag) adds, after the tagged posts, untagged posts that match those words. limit counts posts; cursor and max_tokens page the reply. Event and meetup posts are left out (see "Deliberate exclusions").
list_comments
Lists comments across the site or by one person: what someone has been commenting on, the latest comments site-wide, or quick takes. user, date_from and date_to, af_only, quick_takes_only (top-level quick takes only) and min_karma are the filters; sort is new (the default), old or top. Without user, sort top and quick_takes_only each need both dates, at most 31 days apart. limit counts comments; cursor and max_tokens page the reply. Each comment shows where it is, who it replies to, its karma, agreement, reactions and flags, and its text (cut at about 1,500 tokens; get_comments with comment shows it whole).
get_user
A person's public profile and recent activity in one call. user is required (an id, a profile URL or an exact, case-sensitive slug). It returns display name, ids, karma and AF karma, AF membership, counts, bio, job, organization, links and pinned posts, and limit items in each of: top posts, latest posts, latest comments, sequences and recent wiki edits. af_only limits the post, comment and sequence sections to AF items. Each section ends with the call that continues it; cursor and max_tokens page the reply. Deleted accounts, map locations, login names, former names, moderation status and karma history are not shown.
get_tag
A tag or wiki page: its text and its top posts in one call. tag is required (an id, a /w/…, /tag/… or /p/… URL, or an exact slug; old slugs, Arbital ids and lens slugs work). It returns the page type, parent tag and subtags, likes, the wiki text as Markdown with an outline, lenses, summaries, related Arbital pages, the discussion count and, for a core tag, a preview of the tags grouped under it. section reads one numbered section and match keeps only paragraphs containing a text (not both). sort orders the posts: top (the default), tag_relevance, new or old; limit counts posts; af_only applies to the posts. cursor and max_tokens page the reply.
get_sequence
A sequence (an ordered series of posts) or one of the five collections (rationality, codex, hpmor, highlights, bestoflesswrong). sequence is required (an id, a URL or a collection slug). It lists the sequence's posts chapter by chapter in the forum's chapter order; for a collection, its books and their sequences. post marks a post in the sequence, starts the first page at its chapter and shows its position with the previous and next posts. limit counts posts (for a collection, sequences); af_only keeps only AF posts; cursor and max_tokens page the reply. Posts that are not publicly visible are left out.
list_sequences
Lists sequences: every public sequence (the default), a person's (user), or the curated ones (curated_only). af_only keeps AF sequences. sort is site_order (the default), new or old; limit counts sequences; cursor and max_tokens page the reply. Each item shows its ids, title, author, post count (approximate), creation date, AF status and a description excerpt. Open one with get_sequence.
get_history
Edit history of a post, a comment or a wiki page, or the wiki edits of a person. Give exactly one of post, comment, tag (a lens slug or summary id gives that part's own history) or user (wiki edits only). Without revision, it lists the publicly visible versions, newest first (sort is new or old; limit counts versions), with the original marked. revision (a revision id, original or current) returns that version's text, and match keeps only the paragraphs containing a text. compare_to (a revision id, original, previous or current; needs revision) returns the word-level changes between two versions. phrases checks each phrase in the original and current text and finds the first version that contains it. cursor and max_tokens page the reply.
first_use
Who first used a phrase, and was it in the original text? forms is required: the phrase and up to 4 other forms of it (word endings are not matched, so give each inflection yourself). It searches posts, and comments unless include_comments is false, oldest first, keeps only hits that really contain a form, and checks the edit history of the earliest candidates. af_only searches AF items only; limit counts candidates per page; cursor and max_tokens page the reply. The answer means "the earliest public use that could be verified", not a guaranteed first use. The first page holds the oldest hits of every form; later pages add the next hits of each form, so a continuation's "Earliest verified on this page" is the earliest of that page only.
get_links
Links between posts and wiki pages. Give exactly one of post (incoming links come from posts whose current text links to it; outgoing links are every link in its text, resolved) or tag (wiki pages linking to the page, and the links in its text). direction is both (the default), incoming or outgoing. sort (incoming posts only) is top (the default), new or old; af_only keeps AF posts and comments among the links; limit counts incoming items; cursor and max_tokens page the reply.
get_reactions
Votes, agreement, likes and reactions on one post, comment or wiki page, in detail. Give exactly one of post, comment or tag. It returns karma and vote counts, AF karma for AF items, the agreement score (comments only), a wiki page's likes with who liked it, and every reaction the site shows, with who added, seconded or disputed it and the passage it is anchored to. cursor and max_tokens page the reply; there is no limit, because the reply is one item. Who cast which vote is never public.
get_feed
Site-level feeds. feed is required: frontpage (an approximation of the logged-out home page), recent_discussion, popular_comments, quick_takes, this_week, wiki_activity, dialogues, best_of or spotlight. af_only keeps AF items in the same order (not for wiki_activity). date_from, date_to and sort (new, the default, or old) apply to best_of only. limit counts items per page and is not accepted for spotlight; cursor and max_tokens page the reply. Each feed keeps the forum's own order and says how stale it can be.
list_tags
Lists tags. Without tag: every tag that can be applied to posts (about 1,010), alphabetically. With tag set to one of the 7 core tags (rationality, ai, world-modeling, world-optimization, practical, community, site-meta): all the tags grouped under it, in the forum's order, including wiki-only pages (labelled). limit counts tags; cursor and max_tokens page the reply. There is no af_only and no sort. Open a tag with get_tag.
Shared conventions
Identifiers. A parameter that takes an identifier is named after its entity (post, comment, user, tag, sequence, revision) and accepts the same forms in every tool: an id, a lesswrong.com or alignmentforum.org URL (comment permalinks work as post URLs), or an exact slug. Titles and display names are never accepted; find turns them into ids. Every result labels its ids (post_id, comment_id, user_slug and user_id, tag_slug, tag_id, lens_slug and summary_id, sequence_id and collection_slug, revision_id) so that they can be passed to the next call. Labels such as T3.1 are positions inside one result, not identifiers.
Dates. Input is YYYY, YYYY-MM, YYYY-MM-DD or an ISO-8601 timestamp, always UTC. date_from is the first instant of the period it names and date_to includes the whole period, so date_from: "2024", date_to: "2024" is exactly calendar 2024. The parameters always filter the posting date.
Alignment Forum. Every post, comment and sequence shows its AF status (AF with AF karma, or LW only). af_only is a pure filter: it removes items and never reorders what remains. For people it keeps AF members; for tags, wiki pages and other items with no AF status it does not apply. Threads stay whole, with their non-AF comments labelled not on AF. AF items link to alignmentforum.org.
Replies and cursors. A reply is one block of text of about 15,000 tokens by default (max_tokens 2,000 to 40,000), and limit (10 by default, at most 50) sets how many items a page holds. A long result ends with a cursor, a short opaque token (c_ plus 22 characters); call the same tool with it to continue, repeating nothing but, if you like, max_tokens. A tool can also print a complete hand-off call with a cursor for another tool, for example get_user to list_comments.
Errors and empty results. An error is a tool result whose text starts Error (<category>): , with the category bad_input, bad_cursor, not_found, not_public, login_only, too_broad, rate_limited, politeness_cap, timeout, forum_error or internal, followed by what is wrong and how to fix it. An empty result is not an error. Items the forum hides from logged-out readers read as unknown ids.
Capabilities
What is in scope, which tool offers it, and what is only partly offered (the reasons are under "Deliberate exclusions" and "Things the forums do that you should know"; paging depth is under "Politeness and privacy").
| In-scope item | Offered by | Partly excluded |
|---|---|---|
| Post text | get_post (body, outline, sections, match, dialogues with speakers, debate turns); get_history revision= (any public version) | widget code (omitted, size noted); unaccepted editor suggestions where the HTML confirms them |
| Post metadata | get_post header (incl. Annual Review figures and review comments, glossary, related questions, best answer, canonical sequence); the post record in every list (authors and coauthors, dates, karma, votes, AF karma, comment counts, status, pinned, tags with relevance, Best of) | view and click counts and creation time (not shown to logged-out readers); the date a post moved to AF; the forum's last-modified time as an edit date |
| Post edit history | get_history (versions, original, texts, diffs, phrase introduction); first_use | title history; pre-2019 originals; drafts and autosaves; a complete edit timeline |
| Comments | get_comments (one post, comment thread or wiki page), list_comments (a person, site-wide, quick takes), search kind=comment; reviews listed in get_post | unreviewed-author comments since 2023-04-04, privately deleted and rejected comments; authors of deleted placeholders; retracted comments in search |
| Comment threads | get_comments (ranked threads, comment=, user= reply map with ids, match=) | — |
| Answers on question posts | get_comments (answer threads first, A labels); get_post (best answer, related questions) | related-question links to posts that are not publicly visible |
| User profiles | get_user; find user cards; search kind=user | deleted accounts; map location; login names; old slugs and former names; moderation status |
| Users' posts | list_posts user= (own + coauthored, incl. sub-questions and group posts, flagged); get_user (top and latest, with hand-off cursors) | anonymous-author posts are not attributed |
| Users' comments | list_comments user= (by date or by karma); get_user (latest, with a hand-off cursor) | — |
| Users' wiki edits | get_user (recent wiki edits); get_history user= (all, paged) | the forum keeps no public list of a person's post or comment edits |
| Users' karma | get_user (karma, AF karma, live); cards in find and search (re-read live) | karma history; karma leaderboards |
| Tags | get_tag; list_tags (all taggable tags; full core-tag groupings); find kind=tag; list_posts tag=; search kind=tag; tags with relevance on every post record | the order the site's tag page uses; posts linking to a tag; a list of all wiki-only pages |
| Wiki pages | get_tag (text, lenses, summaries with ids, parent and subtags, likes, Arbital relations, discussion count); get_history tag= (main text, lenses, summaries); get_comments tag= (discussion); get_links tag=; get_reactions tag= | the tag-history feed; contributor statistics |
| Sequences | get_sequence (chapters, posts in order, position and neighbours, stats); list_sequences (all public, a person's, curated); find kind=sequence; get_post (canonical sequence, previous/next) | "all sequences containing a post"; cross-sequence neighbours in collections with unnumbered books |
| Collections and books | get_sequence with the 5 collection slugs; find (alias table and listing) | the order of unnumbered books |
| Which posts link to which | get_links (incoming backlinks, outgoing links resolved, wiki-page and lens backlinks) | links from comments, wiki pages, sequences and profiles to posts; links from non-positive-karma posts |
| Votes | karma and vote counts on post and comment records; wiki-page likes in get_tag; get_reactions for posts, comments, wiki pages and lenses | individual votes, voters, vote timing |
| Tag-relevance votes | the relevance number of each tag on post records; sort: tag_relevance in list_posts and get_tag | who voted on a tag's relevance |
| Agreement scores | every comment record; get_comments signals and contested sort; get_reactions | agreement on posts (not collected) |
| Reactions | net summaries on post and comment records; get_comments signals and cruxes; get_reactions (who, quotes; also on wiki pages and lenses) | reactions with net ≤ 0; current reactor karma |
| Curated status | curated <date> on every post; list_posts curated_only and sort=curated_date; get_feed this_week; list_sequences curated_only | — |
| Frontpage status | frontpage / not frontpaged (personal blog or awaiting review) and pinned on every post; list_posts frontpage_only; get_feed frontpage (labelled approximation) | personal blog vs awaiting review; the exact home page |
| Best of LessWrong / Annual Review | flag on records; get_feed best_of; get_post (review results and the post's review comments); review (<year>) flags on comments | per-voter review values; a whole review year's comments as one list |
| Recent activity | get_feed recent_discussion, popular_comments, quick_takes, this_week, wiki_activity, dialogues, spotlight; list_posts sort=new and sort=active (with last-comment dates); list_comments sort=new; get_user latest sections | "last activity" from drifting fields (computed instead) |
| Feeds | get_feed (9 feeds, all paged) | login-only feeds; RSS |
| Search | search (5 kinds, phrases, exclusions, filters, sorts per kind); find; list_posts query=; first_use | punctuation inside phrases; synonyms; semantic search; deep paging; sequences by author (via list_sequences) |
| Alignment Forum | AF/LW only on every post, comment and sequence and every reference to one; AF karma and AF comment counts; af_only as a pure filter on every tool that lists posts, comments or sequences; af_top; AF links | "when it moved to AF" |
Deliberate exclusions
Every item below is in or next to the scope and is deliberately not offered, or is offered only in the restricted form stated.
- Event and meetup posts are left out of lists but can appear in search. They are not research content: they are left out of
list_posts, the post sections ofget_userandget_tag, and thefrontpageandthis_weekfeeds; they always open by id withget_post, and they are flaggedeventwhere they appear as evidence (search hits, backlinks, recent discussion, a sequence's chapters, a comment's post). Local groups are not offered. - Editing suggestions the author never accepted are removed from post text only where the site's own HTML confirms them. That the site does this is inferred from the forum's code, not observed.
Data the site deliberately hides
| Not offered | Reason |
|---|---|
| Text of deleted comments | The site hides it, although its old versions stay readable through the forum's edit history; they are never fetched |
| Titles, slugs and ids of posts that are not publicly visible, including rejected posts reached through a comment, a chapter, a link or a feed | The site hides these posts; references to them say "a post that is not publicly visible" |
| Metadata of hidden posts, such as their tags | Same |
| The discussion of a post that is not publicly visible, as a discussion | Its page is hidden; its comments, which the site lists publicly, appear one by one elsewhere with the post unnamed |
| Moderation views and moderation-only data | Built for moderators; they bypass the site's own filters |
| Rejected posts and comments, even by id or as a parent | Excluded from every public listing |
| Privately deleted comments, even by id or as a parent | The site removes them from every list |
| Comments by new accounts awaiting review (since 2023-04-04), even by id or as a parent | Not public until approved |
| Authors of publicly deleted comments, also in per-person summaries | The site shows a placeholder; whether it names the author is unknown, so the author is not shown and the placeholder never counts toward a person |
| Profiles of deleted accounts | The site hides them |
| Admin-only wiki pages | Hidden from public listings |
| Reactions with a net count of zero or less | The site hides them |
| Glossary terms the author has not approved, and deleted ones | Readers see only the terms the author approved |
| Counts and flags that would reveal hidden items | They would show what the site hides: a count that includes hidden items is never printed beside a visible count, and notes about short pages are neutral |
| Why something is hidden (draft, deleted or pending review) | The forum does not say, and the counts and flags that could tell are not used |
| The author of an anonymous post or comment, including as the editor of its revisions and through search matches on the author's name | The site shows such items without an author; the forum's data and its search index still expose it |
| Unlisted posts and hidden sequences as items of lists | The site lists them nowhere; they open only by link (shown when addressed directly, flagged, and named with a flag where a public structure such as a sequence's chapters includes them) |
| Karma, agreement, reactions and vote counts under hidden comment karma, also through karma ordering | The post's author hid them; the forum still orders and filters by them |
| Former display names, login names and old slugs of people | The site withholds former names from logged-out readers. Old slugs, which grow with every rename, would reveal them, and so would login names, which are often a person's original name; an old slug you give still resolves |
| People's map locations, also as search matches | Privacy: public but exact; the forum's people search matches the location and shows it in its snippets |
| Fields the forum withholds from logged-out readers (view and click counts, creation times, emails, moderation fields) | Not available logged out: they come back empty |
In scope but not reliable
| Not offered as such | Reason | Offered instead |
|---|---|---|
| When a post moved to AF | The forum records the date inconsistently; a missing date doesn't mean "never" | the post's AF status |
| A "last edited" or "last active" date from the forum's own fields | They mislead or drift | the date of each public version; activity computed from the comments fetched |
| Complete edit timelines and revision counts | Drafts and autosaves are hidden, and versions are duplicated and renumbered | the public versions, labelled; "all public versions listed" only when that has been checked, never "complete" |
| Title history | Not available to logged-out readers | — |
| "Everything that links to X" | Only post bodies create links, only posts with positive karma count, and links are recorded as of the linking post's last edit | get_links, with those limits stated |
| "All sequences containing this post" | The forum has no lookup from a post to its sequences | the canonical sequence (membership checked); any given sequence's contents and the post's position in it |
| The chapter order the site displays; previous and next as the site computes them | Chapters can share a number, which makes their order arbitrary, and the order the site's page shows is not known | the forum's chapter-list order, and neighbours computed from it, stated as such |
Previous and next across sequence boundaries in collections with unnumbered books (bestoflesswrong), and the order of those books | The forum orders books by number with no tie-break, and 3 of bestoflesswrong's 4 books have none | books in the order the forum returns them, labelled; cross-sequence neighbours only in collections whose books all have distinct numbers |
| Complete related-question trees | 26 of 116 links point at posts that are not public | the public part |
| Finding old-style debates by search | The forum has no public filter for them | the built-in list of 6 (the feature is retired) |
| The post order of the site's tag page | The site's page code is not public | both top and tag_relevance |
| Old post slugs | Posts keep no former slugs | the id in a post URL; find by title |
| Who voted, how and when; a person's karma history | Individual votes are hidden, and karma history is shown only to its owner | vote counts, karma, reactions (which name reactors) |
| Karma leaderboards | The forum's are approximate and count self-votes | — |
| Agreement on posts | Not collected | agreement on comments |
| The current karma of people who reacted | The forum shows a stored snapshot, not the current value | reactors' names only |
| Karma of old-style debate turns as a measure of reception | Only the post's authors may vote on turns | not shown on turns |
| The site's "hotness" score as a measure of quality | It decays with age and is recomputed only from time to time | never shown; only the front-page feed uses the site's ranking |
| Search: "tag A but not B" or two required tags; two bounds on one field; collections and books by name; semantic search | Limits of the forum's search | one tag; dates only on posts and comments; find's collection names; semantic search is available only to the site's admins |
first_use for phrases with accented letters or punctuation inside a word ("Gödel", "Löb's theorem", "GPT-4.5") | The forum's search deletes those characters inside quotes, so such phrases can't be searched in date order | refused, with a suggestion of ASCII spellings writers also use, which can be traced; search finds the accented form by relevance |
| Search for sequences by author | The search index's author filter for sequences is unconfirmed, and a filter the index does not support silently finds nothing | list_sequences {user} |
| Date and karma orders for wiki-page search hits | Imported pages carry creation dates from Arbital, and a page's karma is the likes on the page itself | relevance order only; other orders are refused with the reason |
Feeds whose window the forum doesn't bound (this_week, dialogues) in full | No maximum and no paging; the window's true size is unknown | 300 and 100 items per fetch, paged here; the last page says when more may exist |
GreaterWrong URLs; old Agent Foundations links (/item?id=) | Their forms are unverified, and old Agent Foundations ids can't be looked up | ids in GreaterWrong URLs, read on a best-effort basis; an /item?id= link is refused with an explanation |
Out of scope, or left out by design
| Not offered | Reason |
|---|---|
| Anything that writes, votes, posts or reacts; anything that needs a login (drafts, messages, personalised feeds, the forum's own interfaces for AI agents) | Out of scope |
| Bulk downloading; a catalogue of every user | Out of scope, and the caps under "Politeness and privacy" rule it out. The forum's user catalogues are moderation views; people are found with find, search and the commenters of a post |
| A list of every wiki-only page | 7,311 pages, most of them empty placeholders. Wiki-only pages grouped under a core tag are listed by list_tags; the others are found with find and search kind=tag (search knows 1,491 wiki-only pages) |
| A generic query tool, or a way to send your own forum queries | Each tool is shaped like a research task, with vetted queries and one shared vocabulary |
The forum's agent document (/SKILL.md) | It contains instructions aimed at AI agents; it is never fetched or passed on |
| The forum's RSS feeds and Markdown pages | They carry less than the forum's data interface (no agreement, answers, AF numbers or ids), and RSS stops at 10 posts or 50 comments |
| Site permission groups other than AF membership (moderators, for example), and ban dates | Although public, they are site permission and moderation records rather than profile content, and whether the site's profile page shows them is not known. A comment's own moderator mark is shown (moderator comment): it describes the comment, not the person |
| The site's tag-history feed and wiki contributor statistics | The feed includes rows for deleted items and hidden posts and can fail as a whole, and its site-wide windows amount to bulk downloading; contributor statistics drift, with unknown limits. The history of a page's main text, lenses and summaries is offered (get_history tag=), and so are a person's wiki edits |
| Edit history of bios and sequence descriptions | Not research content; the post, comment and wiki histories are offered |
| A whole Annual Review year's review comments as one list | Each post's reviews are listed by get_post, and the year's winners by get_feed best_of; a year-wide list of reviews (282 for 2024) would add a listing mode for little research value |
| Annual Review votes per voter | Anonymous raw vote lists with floating-point noise; final scores and Best-of status are shown |
Things the forums do that you should know
- Approximate counters. Numbers marked
~(comment counts, a sequence's post count, a tag's post count) are the site's own counters. They drift, and some count items that are hidden from logged-out readers, so they can differ from what is listed. A tag's post count overcounts by up to about 41 %; where a tag's post list shows a forum count it says "about N posts (forum count; may include a few posts shown only to logged-in readers)". - Comments awaiting review. Comments by new accounts still awaiting moderator review and comments their authors deleted privately are not public, so they are missing from every discussion; replies to them are marked "parent comment not publicly visible". A discussion's header gives the number of comments listed beside the site's own counter, which can differ.
- Search phrases. The forum's search deletes every character outside letters, digits and spaces inside quotes. So hyphens and underscores count as spaces; a word with an apostrophe is searched without the part after the apostrophe and then checked here in its original form (a hit that has only the other form is labelled
matches without the possessiveormatches only with a possessive); a phrase with punctuation inside a word or with accented letters ("GPT-4.5", "R&D", "Gödel") is searched as plain words and checked exactly here, which works withsortrelevance only and may miss some uses. Search matches each item's current text only, dated by its original posting date. Unquoted query words are matched loosely: with several words most but not all must match (two need only one), word endings match, typos barely, OR and AND are ignored. Abbreviations and synonyms are not expanded. exclude. It takes single words only, because the forum can't exclude a phrase. Withexcludeand nophrases, any one of the query words is enough; withphrases, query words only affect ranking; in both cases accented letters in query words are dropped.- Retracted comments. Search and
first_useleave out retracted comments, though they are public: the comments index does not hold them. They appear inget_commentsandlist_comments. Search also leaves out drafts, deleted posts, posts with negative karma and comments awaiting moderation. - AF numbers and LW numbers. "karma" is LessWrong karma and "AF karma" is the Alignment Forum score, shown only for AF items; the forum also stores an AF score on non-AF items, where it means nothing.
topalways uses LW karma. Comment counts are the site's counters, and the AF comment count is a separate approximate number. - "original" before 2019. Texts from before 13 February 2019 exist only as a February-2019 import snapshot dated to the original posting time; earlier wording and edits were not kept. For some later posts the public history starts after publication ("published text not available"), and a post's date can be later than its first public appearance. Version numbers repeat and have gaps, because drafts and autosaves are not public, so versions are addressed by revision id.
- Frontpage ambiguity. "not frontpaged" can mean a personal-blog post or one still awaiting review (reviews have taken up to about two days), and the forum does not say which.
get_feedwithfeed: frontpageis an approximation of the logged-out home page, because the site's own page code is not public. - The forum's change counts. In edit histories, the counts of characters added and removed are the forum's own: they are counted against the revision stored just before, which may be a non-public draft, and images and links count as no text change.
- People and names. Slugs are exact and case-sensitive; slug guesses can hit namesakes, so the request echo names who a slug resolved to. Accents matter ("Højmark" is not "Hojmark"). Login names, former names and real names that differ from the display name are not searchable.
- Karma in search. Search karma, counts and dates are snapshots as of the search index's last update; karma shown in results is re-read live.
- Feeds. The forum caches some feeds for several minutes, so
popular_comments,dialoguesand others can be a few minutes old; each says so.
For tag and sequence items, find also searches the long form of these abbreviations (matched against the whole query, case-insensitively, also with a trailing "s") and reports that it did:
| Abbreviation | Also searched as |
|---|---|
| LLM | large language models |
| RLHF | reinforcement learning from human feedback |
| AGI | artificial general intelligence |
| ML | machine learning |
| EA | effective altruism |
| FDT | functional decision theory |
| UDT | updateless decision theory |
| CEV | coherent extrapolated volition |
| ELK | eliciting latent knowledge |
| SAE | sparse autoencoders |
| IDA | iterated amplification |
| HPMOR | Harry Potter and the Methods of Rationality |
| mech interp | mechanistic interpretability |
find also matches collections and books by title, and these names for the five collections: rationality ("Rationality: A-Z", "The Sequences", "R:A-Z", "Rationality from AI to Zombies"), hpmor ("HPMOR", "Harry Potter and the Methods of Rationality"), highlights ("Sequence Highlights", "Highlights from the Sequences"), codex ("The Codex"), bestoflesswrong ("Best of LessWrong").
Politeness and privacy
Politeness.
- Requests go out one at a time, process-wide (one queue shared by all tool calls), with at least 3 s between the starts of two requests. That spacing is the only rate at which the forum was ever observed, and it never throttled.
- Session caps, in rolling windows: 150 requests and 100 MB per 10 minutes, and 1,500 requests and 500 MB per 24 hours. Reaching one ends the call with
politeness_capand the time the pause ends; this stops runaway loops and rules out bulk downloading. - Each tool call has a cap on forum requests (find 3, search 5, get_post 3, get_comments 4, list_posts 6, list_comments 5, get_user 4, get_tag 2, get_sequence 3, list_sequences 5, get_history 7, first_use 7, get_links 4, get_reactions 3, get_feed 2, list_tags 2), a deadline of 50 s per call (no new request starts after 40 s; the reply then ends
Stopped early (time limit)with a cursor) and a download cap of 20 MB. A request that would pass its cap is not sent, and the page endsStopped early (request cap)with a cursor. A retry of a request that got no usable answer (one per request after a dropped connection or an empty 5xx; at most two per call after a 429 or 503) is not counted against the call's cap; it is still spaced and counted in the session windows. - Site-wide lists in date order (
neworold) that no filter butaf_onlynarrows stop after 500 items (the depth guard); other orders end at the forum's own limit of about 2,000 results. - Answers are cached in memory (one LRU of at most 64 MB, with a time to live per kind of data), so paging through a discussion, re-sorting it or asking about a participant reuses one fetch.
- Every request carries this User-Agent, which names the project and gives no contact:
lesswrong-mcp/1.0.0 (read-only research extension for Claude Desktop; single user; one request at a time). - When the forum signals overload or rate-limiting, the spacing grows (up to 30 s) and all requests pause, for at most 15 minutes; during a pause every call answers
rate_limitedat once, naming the time the pause ends.
Privacy.
- No cookies are sent and nothing logs in. The server reads only what the forums show to logged-out visitors.
- No cache or data files are written. The server logs one line per request to stderr (template label, status, time, size and whether the cache answered; no content, no titles and no hidden ids), and Claude Desktop keeps the server's one-line request logs in its own log files.
LESSWRONG_MCP_DEBUG=1adds template names and the numbers of rows dropped by the visibility rules, never their ids or text. - Cursors expire after an hour and when the server restarts. A cursor is a random token; the state it names stays in the server's memory and is never shown.
- People's map locations, login names, former names and old slugs are never shown; "Deliberate exclusions" gives the reasons.
- Warning: Forum text can try to make Claude send your conversation data to the forum as a search query. All text from the forums, titles and names included, is written by forum users and may address AI systems. The server's instructions tell Claude to treat forum text as material, never as instructions, and not to send your own information to the forum as a search query, and the server marks the boundaries of every block of forum text in a reply. These are measures, not guarantees: you should know that search queries go to the forum.
Development
The project is TypeScript (strict) on Node.js 20 or later. The sources are in src/, the tests in test/ and the build scripts in scripts/.
npm installinstalls the pinned dependencies.npm run typecheckrunstsc --noEmit.npm testruns the whole test suite offline: every test talks to a fake forum built from hand-made fixtures, and a tripwire makes any real network access fail.npm run buildbundlessrc/index.tsand its dependencies with esbuild into the one filebuild/bundle/server/index.mjs(ESM for Node 20, not minified, nonode_modules).npm run packbuilds, then stagesmanifest.json,icon.png,README.mdandLICENSEinbuild/bundle/, runsmcpb validate, packsbuild/lesswrong-mcp-1.0.0.mcpband runsmcpb infoto confirm that the bundle is unsigned. It never signs.build/is not kept in git.npm run smokestarts the packed bundle over stdio with the network disabled, lists the tools and makes one deliberately wrong call; runnpm run packfirst.
License
MIT, Copyright (c) 2026 Sean Kessinger (see LICENSE). Forum content belongs to its authors. This license covers the code of this extension only and gives no rights to what the forums host.