pf-debate-mcp
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| PF_DEBATE_HOME | No | Directory where the card library and data are stored. Defaults to ~/.pf-debate/. | |
| TABROOM_PASSWORD | No | Optional password for Tabroom/OpenCaselist login. | |
| TABROOM_USERNAME | No | Optional username for Tabroom/OpenCaselist login. | |
| PF_DEBATE_EXPORTS | No | Directory where exported speech docs are saved. Defaults to ~/Documents/pf-debate/. |
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 |
|---|---|
| search_cardsA | Search already-cut debate cards. Plain English works ("cards saying data centers raise power bills"), and so does debate shorthand ("econ decline war", "heg", "prolif"). |
| get_cardA | Card by id (lib:N or cN). view="read" (default, compact): tag, cite, and only the underlined/highlighted text (==highlighted== is read aloud, underlined is context, ... marks skipped text). view="full": the whole body, needed to judge context, find indicts in unhighlighted text, or recut. |
| fetch_sourceA | Fetch an article/PDF (or re-open a fetched source by its id) as clean numbered paragraphs + citation metadata. Long sources are paged: call again with start_paragraph to continue. Copy quotes for cut_card exactly from this text. |
| suggest_cutA | Suggest a card for |
| auto_cutA | Find evidence for a claim in one step: the best already-cut library cards PLUS new cards auto-cut from fresh papers/news (fetched, passage picked, highlighted, verified verbatim). Tags default to the claim: rewrite them to what each highlight proves, and check quals before using a card. |
| find_sourcesA | Find NEW evidence to cut: recent scholarly papers (with author affiliations for quals and free PDF links) and current news articles. kinds: ["papers", "news"] (default both). Free and keyless; if a service is busy it is listed under "skipped". Then fetch_source a result's url and cut it. |
| cut_cardA | Cut an evidence card. The body is the exact source text from start_quote through end_quote (a few sentences to a few paragraphs; enough context that the author's meaning is clear). highlight = phrases read aloud; underline = wider phrases that give context (defaults to highlight). Every quote must be copied verbatim from the source (only whitespace, quote marks and dashes are normalized); anything else is rejected with a hint showing where the text stopped matching. source_id: sN from fetch_source, or a card id (cN, lib:N) to re-cut an existing card. paragraph: the [N] number from fetch_source where the card starts; required when start_quote appears more than once in the source. |
| export_docA | Write a speech doc / case / block file. items in order, each one of:
{"pocket": "..."} {"hat": "..."} {"block": "..."} (Verbatim headings: Pocket > Hat > Block),
{"tag": "..."} (analytic tag, no card), {"text": "..."} (speech prose), {"card": "c12" | "lib:345"}
(optionally {"card": id, "tag": "new tag"} to retag a card in the export).
format "docx": Verbatim-compatible Word file. format "gdocs": an .html file for Google Docs users (open it,
select all, copy, paste into a Google Doc; or upload it to Google Drive and open with Google Docs).
version "full" (default): complete cards, the doc you send in the email chain / keep as the file.
version "read": read-ready copy to speak from (Rhetorify): each card cut to tag, short cite and only its
highlighted words, each hat/block heading marked with its time at |
| read_speechA | Time a speech exactly and return its read-ready script (what is actually said aloud). Use it to check a case fits before exporting, and to see what to trim. Counting is exact, never estimate word counts yourself. items: the same list as export_doc (headings, {"tag"}, {"text"}, {"card": id}). A card counts its tag, short cite and highlighted words only. For a case pasted as plain text, pass the words the debater actually reads as {"text": ...} items (highlighting in pasted text can't be seen). speech: constructive (4:00), rebuttal (4:00), summary (3:00), final focus (2:00). wpm: the debater's pace. Lay about 160, fast about 200, circuit about 230+. Ask their pace if it matters. |
| caselist_searchA | Search OpenCaselist (disclosed cases) for a team, debater last name, or argument text. Defaults to the current HS PF caselist; pass a slug like 'hspf25' for older ones. Limit: 4/min. |
| caselist_teamC | A team's caselist page: rounds (tournament, side, opponent, round report, open-source file path) and cites (their disclosed cards). Use for scouting and building blocks against their case. |
| caselist_entriesA | Scout a whole tournament field: match every entry to its caselist page in one call. entries: the CSV Tabroom exports from a tournament's Entries/Field page (Institution,Location,Entry,Code,...), or one line per team like "Plano West, Park & Jiang". Returns per team: disclosed or not, round count, recent open-source doc paths (for caselist_download) and cite titles. Then follow pf-scout "Prep out a tournament". |
| caselist_downloadA | Download an open-source .docx from OpenCaselist (the 'opensource' path from caselist_team or a search 'download_path') and import its cards as cN ids you can read, analyze, re-cut or export. |
| library_statusB | Whether the local card library is built, how many cards per event, years covered, and build progress. |
| build_libraryA | Install the card library in the background (one time; resumable; progress via library_status). mode "download" (default): the prebuilt library (~170k cards incl. the most-read PF, LD, Policy and camp cards; a few minutes). "quick" / "full": build from the raw dataset instead (PF only in minutes, or everything in a few hours). |
| pf_guideA | PF debate knowledge. Read "pf-debate" first. Task guides: pf-case, pf-cut-card, pf-analyze, pf-blocks, pf-blockfile (team block files), pf-scout, pf-practice. References: glossary, format, tactics, impacts, evidence-ethics. |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
| pf-analyze | Use when a debater asks to analyze, rate, check, or indict a card, a case, or an opponent's evidence, or wants crossfire questions or answers against specific evidence. |
| pf-blockfile | Use when a debater or team wants a block file, blockfile, master file, A2/AT file, frontline file, or "blocks for the whole topic" - a side-organized Word file of answers to every opposing argument, with numbered, labeled, carded responses. |
| pf-blocks | Use when a debater needs blocks, frontlines, "AT"/answers-to responses, turns, or a written rebuttal, summary, or final focus, or asks what to do after an argument was dropped or turned. |
| pf-case | Use when a debater asks to build, write, or improve a PF case, contention, constructive, advantage, or disadvantage, including cases centered on a specific impact (nuclear war, extinction, econ, climate, structural violence) or for a given side of a resolution. |
| pf-cut-card | Use when a debater asks to cut a card, find evidence or a source for a claim, recut or retag a card, or get cards for an argument (PF, LD, or policy debate). |
| pf-debate | Use when helping with high school debate, especially NSDA Public Forum (PF) - cases, contentions, cards, evidence, blocks, frontlines, rebuttals, summaries, final focus, crossfire, weighing, impacts, caselist, or any debate jargon (link turn, NUQ, collapse, extend, powertag, speech doc). |
| pf-practice | Use when a debater wants to drill or practice - a crossfire drill, a mock practice round against their case, judge feedback or an RFD with speaker points, or checking whether a speech fits its time (word/speed check). |
| pf-scout | Use when a debater starts prep on a new PF topic, asks for a topic analysis or prep plan, wants to know common arguments on a resolution, or wants to scout an opponent, look up a team's caselist or disclosed case, or prepare for a specific round. |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
| pf-analyze/SKILL.md | |
| pf-blockfile/SKILL.md | |
| pf-blocks/SKILL.md | |
| pf-case/SKILL.md | |
| pf-cut-card/SKILL.md | |
| pf-debate/SKILL.md | |
| pf-debate/references/evidence-ethics.md | |
| pf-debate/references/format.md | |
| pf-debate/references/glossary.md | |
| pf-debate/references/impacts.md | |
| pf-debate/references/tactics.md | |
| pf-practice/SKILL.md | |
| pf-scout/SKILL.md |
TDQS
Scored across 16 tools
Each tool targets a distinct resource or action: guide, library install/status, card search/retrieval, source fetching/cutting, caselist scouting/download/search, document export, and speech timing. Even the similar cut tools (suggest_cut vs. auto_cut) are clearly differentiated by whether they operate on a provided source or perform an end-to-end evidence search.
Most tools use a verb_noun pattern (build_library, export_doc, search_cards, get_card, cut_card, fetch_source, suggest_cut, find_sources, read_speech), but a few deviate with noun-first caselist_* names (caselist_team, caselist_entries, caselist_download, caselist_search), noun_noun names (pf_guide, library_status), and the compound auto_cut. This is readable and groups related tools, but the mixed conventions are a minor inconsistency.
At 16 tools, the set is slightly above the 3-15 'well-scoped' range but not excessive for a debate prep server covering research, card cutting, caselist scouting, document export, and speech timing. Each tool serves a distinct workflow step and none feel redundant, so the count is justifiable.
The tool set spans the full debate prep pipeline: finding/fetching sources, cutting and searching cards, scouting/downloading opponent cases, building exports, and timing speeches. Minor gaps include no card update/delete operations and no direct import from arbitrary pasted text, but these can be worked around through re-cutting or using read_speech.