X Bookmarks Mcp — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited X Bookmarks Mcp (Agent Skill) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
Local-first, privacy-focused MCP server that turns exported X/Twitter bookmarks into a searchable, enriched knowledge base for Claude Desktop, Claude Code, and other MCP clients.
The bookmark database, notes, tags, and search index stay local. Optional enrichment makes outbound requests to public links contained in the export so their readable text can be indexed.
X bookmarks are easy to save and difficult to reuse. This project turns an exported bookmark collection into a local knowledge base that can be searched, tagged, annotated, enriched, and exposed through MCP.
The project is intentionally small: SQLite is the source of the local index, FTS5 provides search, Python handles import/enrichment, and the MCP server exposes a bounded tool surface.
x-article link.URL enrichment processes untrusted links, so the fetcher:
http:// and https://;This is defense in depth for a local enrichment tool. Do not expose the MCP server or its data directory directly to the public Internet.
Export X bookmarks to JSON and save the file under data/exports/, for example:
data/exports/bookmarks.jsongit clone https://github.com/p0ki/x-bookmarks-mcp.git
cd x-bookmarks-mcp
python -m venv .venv
source .venv/bin/activate
pip install -r requirements.txtpython -m src import data/exports/bookmarks.json
python -m src enrich
python -m src statsRe-running import is safe:
python -m src.serverExample MCP client configuration:
{
"mcpServers": {
"xbookmarks": {
"command": "python",
"args": ["-m", "src.server"],
"cwd": "/absolute/path/to/x-bookmarks-mcp"
}
}
}Build:
docker build -t xbookmarks-mcp .Run the MCP server over stdio:
docker run --rm -i \
-v "$PWD/data:/app/data" \
-v "$PWD/config.yaml:/app/config.yaml:ro" \
xbookmarks-mcpCLI through Docker Compose:
docker compose run --rm xbookmarks-cli import data/exports/bookmarks.json
docker compose run --rm xbookmarks-cli enrich
docker compose run --rm xbookmarks-cli statsbookmark export
|
v
ingest.py
|
v
SQLite + FTS5 <---- notes / tags
|
+---- optional public URL enrichment
|
v
MCP server (stdio)
|
v
Claude / MCP client| Tool | Description |
|---|---|
search_bookmarks | Full-text search across bookmark content |
list_tags | List tags with bookmark counts |
get_bookmark | Get a bookmark with links, tags, and notes |
browse_by_tag | Browse tagged bookmarks, newest first |
add_note | Add or replace a local note |
add_tag | Add an idempotent normalized tag |
get_stats | Collection and enrichment statistics |
summarize_topic | Gather bounded content for MCP-client synthesis |
| Variable | Default | Description |
|---|---|---|
DB_PATH | ./data/bookmarks.db | SQLite database path |
CONFIG_PATH | ./config.yaml | Tag configuration |
FETCH_DELAY_SECONDS | 1.0 | Delay between links for one bookmark |
FETCH_TIMEOUT_SECONDS | 10 | HTTP timeout |
MAX_CONTENT_LENGTH | 50000 | Maximum extracted text retained per link |
MAX_RESPONSE_BYTES | 5000000 | Maximum downloaded response size |
Tag rules live in config.yaml.
pytest -v
pytest --cov=src --cov-fail-under=80 -v
ruff check src/ tests/
black --check src/ tests/
isort --check-only src/ tests/
python scripts/check_private_data.pyCI tests Python 3.11, 3.12, and 3.13 and also performs dependency, secret, privacy, Docker-image, and Docker-Compose checks.
Runtime and development dependencies are pinned for reproducible CI/install behavior. The project intentionally remains on the supported MCP Python SDK 1.x line until a deliberate MCP v2 migration is completed.
~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.