LABSCO SUMMARY
An independent implementation of a published method, and it says so.
The paper's prompts were modified to work with structured outputs, and the author states outright that this is not the official implementation. What it gives you that a summariser does not is decontextualisation: each claim stands on its own, which is the property that makes checking it — by the bundled prompt or by a person — possible at all.
What it is
A local Python server implementing the Claimify method from the paper "Towards Effective Extraction and Evaluation of Factual Claims" — a four-stage pipeline that turns text into atomic factual claims.
What you get
- Extraction in four stages: split into sentences with their surrounding context, keep only the sentences carrying verifiable propositions, resolve ambiguity or discard what cannot be clarified, then decompose into atomic self-contained claims
- Opinions and speculation filtered out at the selection stage instead of being extracted as facts
- OpenAI structured outputs throughout, so results come back typed rather than as prose to parse
- Each extraction stored as MCP resources — an aggregate at
claim://extraction_<n>_<timestamp>and one resource per claim atclaim://<slug> - A
verify_claimprompt that has the model check a single claim against authoritative sources and answer VERIFIED, UNCERTAIN or DISPUTED, with at least three referenced sources when verified - The original language preserved, and logging of every model call and pipeline stage
Requirements
Python 3.10+ and an OpenAI API key in OPENAI_API_KEY, with a model that supports structured outputs — gpt-4o or the cheaper gpt-4o-mini. Create a virtualenv, pip install -r requirements.txt; the NLTK punkt data downloads on first run. Point your client at the virtualenv's Python and claimify_server.py. LOG_LLM_CALLS, LOG_OUTPUT and LOG_FILE control the logging.
Setup effort
Build from source — git clone https://github.com/AdamGustavsson/ClaimsMCP
USE CASES
Fact-checking a draft before it goes out
Extract the claims that are actually checkable, with opinion and speculation already filtered out.
Turning an article into something verifiable
Each claim comes out self-contained, so it can be checked without the paragraph it came from.
Running the verification pass too
Use the bundled prompt to have the model search sources and return VERIFIED, UNCERTAIN or DISPUTED with references.
Keeping a record of what was extracted
Every extraction is stored as resources — the whole run and each individual claim — so you can attach them later.
BEFORE YOU INSTALL
What to know first
Requires
- Python 3.10+
- OPENAI_API_KEY in your environment
Where it runs
The documented client runs the server on your machine.
INSTALLATION
Connect your client
Server setup
git clone https://github.com/AdamGustavsson/ClaimsMCP
cd ClaimsMCP
python -m venv claimify-env
source claimify-env/bin/activate # On Windows: claimify-env\Scripts\activate
pip install -r requirements.txt
python -c "import nltk; nltk.download('punkt_tab')"
cp env.example .envEdit .env and set OPENAI_API_KEY (and optionally LLM_MODEL)
Add the mcpServers block below to ~/.cursor/mcp.json (or your client's equivalent) with absolute paths
MCP Clients
Cursor
{
"mcpServers": {
"claimify-local": {
"command": "<YOUR_PATH_TO_CLAIMIFY_ENV>/bin/python",
"args": [
"<YOUR_PATH_TO_PROJECT>/claimify_server.py"
]
}
}
}The configuration on this page does not set OPENAI_API_KEY; the project's instructions put it in a .env file. Check which folder the server reads that file from before you rely on it.