Pre-publish content quality gate (SEO, AEO, GEO) - API, CLI, MCP
Project description
Dokeo — Content Quality Gate
Pre-publish content quality gate for SEO, AEO, and GEO. Scores every post, email, video script, and AI output against 8 core checks before it ships.
Surfaces
Dokeo ships as four parallel surfaces that all hit the same gate engine:
| Surface | Port / Transport | Best for |
|---|---|---|
| FastAPI service | http://host:8000/api/v1/* |
Programmatic integrations, webhooks |
| Next.js web app | https://host/web/* |
End-user UI with Clerk auth |
| Streamlit UI | https://host/ |
Legacy dashboard, single-user password |
| MCP server | stdio | Claude / Cursor / any MCP client |
| CLI | dokeo in your shell |
Pipelines, n8n, Claude Code |
The legacy webhook (port 8502, /check, /check-url, etc.) is kept for
backward compatibility with existing n8n / Zapier / Make integrations.
Quickstart
# 1. Install
pip install -e .
# 2. Run the API
uvicorn api.main:app --reload --port 8000
# → http://localhost:8000/docs for OpenAPI
# 3. Run the web app (separate terminal)
cd web && bun install && bun run dev
# 4. Run the Streamlit UI (separate terminal)
streamlit run app.py
# 5. Try the CLI
echo "# My post\n\n## Question?\n\n..." | dokeo pipe
# 6. Try the MCP server (Claude Desktop / Cursor will spawn it for you)
dokeo-mcp-server
Self-hosted with Docker
cp .env.example .env
# Edit .env - set DOKEO_API_KEY, DOKEO_PASSWORD, Clerk keys
docker compose up -d
Routes (via Caddy at ports 80/443):
/→ Streamlit (port 8501)/web/*,/sign-in,/sign-up→ Next.js (port 3000)/api/v1/*→ FastAPI (port 8000)/check*,/check-url*,/check-blog*,/health*, etc. → legacy webhook (port 8502)
Auth model
| Surface | Auth |
|---|---|
FastAPI (/api/v1/*) |
Bearer token: DOKEO_API_KEY or DOKEO_API_KEYS=key:tenant,... |
| Legacy webhook | Same Bearer token |
| Streamlit | Cookie session via DOKEO_PASSWORD |
| Next.js | Clerk (hosted) |
| MCP | Filesystem only; no network exposure |
| CLI | None (local) |
DOKEO_API_KEY is required in any non-dev environment. Streamlit refuses
to boot in production without DOKEO_PASSWORD.
Documentation
- API: OpenAPI at
/docsor/redocwhen running - MCP: docs/mcp.md
- Engine config:
config.yaml - Content-type definitions:
gate/content_types.py
Tests
pytest # all tests
pytest tests/test_mcp_server.py # MCP only
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file dokeo-3.0.0.tar.gz.
File metadata
- Download URL: dokeo-3.0.0.tar.gz
- Upload date:
- Size: 121.0 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.9.6
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
9694d15db26ce27eb40dc83fa145c4b325af57b53d7b828742d3a36edbf31546
|
|
| MD5 |
6bd12398304c78da5a734883dcb076c3
|
|
| BLAKE2b-256 |
a96018208fa4fccb2c93ecaafc1da415a1b442478a1ceeb6d78ef17ce36fd831
|
File details
Details for the file dokeo-3.0.0-py3-none-any.whl.
File metadata
- Download URL: dokeo-3.0.0-py3-none-any.whl
- Upload date:
- Size: 129.9 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.9.6
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
c6eb5d4223702b56d60b27114eb9b249799fe1debe4072af912c0cb11193de3d
|
|
| MD5 |
75ba0823e21b5710d98cd4a46eb36690
|
|
| BLAKE2b-256 |
060d1ca5a0c12bc7657b2ba641015de1fcf6339b31ec475a152e5fe1d7868b48
|