SolidOC (solidoc-solidjs-mcp)
High-performance, local FastEmbed ONNX vector + SQLite FTS5 Model Context Protocol (MCP) server for SolidJS documentation and @solid-primitives.
- Hybrid search: 384-dim BAAI/bge-small-en-v1.5 embeddings + SQLite FTS5 BM25, fixed candidate pools, deterministic rankings.
- Clean chunks: heading-aware splitting, version-badge stripping, tiny-section merging, cross-doc dedupe; every chunk fully inside the model's 512-token window (zero silent truncation).
- Native stdio: local execution, zero network ports.
- Additive-only installer: never rewrites your existing MCPs or settings.
Install (Windows and WSL — same package, simultaneously)
One wheel (py3-none-any) serves both OSes: pip resolves each platform's
binaries automatically. There are no intermediate steps — upload once to
PyPI, then on each OS:
pipx install solidoc-solidjs-mcp
# or: pip install solidoc-solidjs-mcp
# or: uv tool install solidoc-solidjs-mcp
solidoc install --global
pipx install solidoc-solidjs-mcp
solidoc install --global
Close OpenCode first. It holds locks on the server executable and the database; installing, uninstalling, or reinstalling while it runs will fail or half-finish.
Each OS keeps its own database, model cache, and config (see paths
below). Never point the DB across the Windows/WSL boundary (/mnt/...):
SQLite locking is unreliable there and both sides will corrupt or stall.
The PyPI wheel bundles a prebuilt documentation database, so there is nothing to build after install — first run copies it into place automatically. The embedding model (~130 MB) downloads itself on first use.
Per-OS paths
| What | Windows | WSL / Linux |
|---|---|---|
| Server executable | pipx venv Scripts\solidoc.EXE (on PATH) |
pipx venv bin/solidoc (on PATH) |
| Vector database | %USERPROFILE%\.solidoc\solidoc.db |
~/.solidoc/solidoc.db |
| Embedding model cache | %TEMP%\fastembed_cache |
$TMPDIR/fastembed_cache or ~/.cache/fastembed |
| Global MCP config | %USERPROFILE%\.config\opencode\opencode.jsonc |
~/.config/opencode/opencode.jsonc |
| Repo-local MCP config | <repo>\opencode.jsonc |
<repo>/opencode.jsonc |
Usage (commands run standalone — no uv/pip prefix needed)
solidoc serve # boot the MCP stdio server (what OpenCode launches)
solidoc search "createSignal" # test hybrid search in the terminal
solidoc search "query" --category primitives --limit 3
solidoc install # cwd-aware: repo dir -> ./opencode.jsonc, home/root -> global
solidoc install --global # global config, from anywhere
solidoc install <path> # explicit directory, from anywhere
solidoc uninstall # remove entry + wipe DB + model cache (asks first)
solidoc uninstall --global --yes # same, global scope, no prompt
solidoc build --docs ./assets # rebuild the vector DB from markdown (rare)
install is additive-only: sibling MCPs, comments, and formatting in your
config are preserved (verified by test_installer.py). If your main config
file is unparseable, it is backed up, left untouched, and the entry goes
into a sibling opencode.json that OpenCode merges automatically.
uninstall is a full wipe of solidoc artifacts only: our config entry, the
SQLite database, and our model-cache subtree. Everything else is left
byte-identical. Removing the package itself is a second, separate step —
and order matters: solidoc uninstall first (it needs the CLI
present), pip uninstall solidoc-solidjs-mcp second. Reversed order strands
the database with no tool to remove it.
Rebuilding the database
Only needed when the documentation sources change. From the source tree
(assets/ lives in this repo, so clones can rebuild anywhere):
uv run solidoc build --docs ./assets --db solidoc/solidoc.db # ~40 min, single process
Expect per-batch log lines (batch 12/57 ... rate=1.5/s); a flat 0% for the
first minutes is normal (model load), but any batch stalled >5 min is not —
stop it with Ctrl+C (workers exit with the terminal) and report it.
WSL validation (post-clone, no Windows crossover)
The wheel bundles one OS-portable database (relative paths, float32 blobs,
cross-platform SQLite), and first run copies it into ~/.solidoc/
automatically. Inside WSL, after git clone:
pipx install solidoc-solidjs-mcp
solidoc install --global
solidoc search "createSignal" --limit 1 # warms the model (~130 MB), answers
No build, no manual copy. What stays forbidden is running two servers
against one shared file across /mnt (locking) — each OS keeps its own
copy. If the bundled DB ever misbehaves, fall back to a native WSL rebuild
from the cloned assets/ instead.
Troubleshooting
- First search is slow: the embedding model downloads once (~130 MB), then everything is local.
- Install/uninstall errors about locked files: quit OpenCode first.
solidocnot recognized: the install target'sScripts/bindir is not on PATH (pipx handles this; plainpip installmay need a new shell).- Unparseable config: the installer backs it up, leaves it alone, and prints the exact block to paste manually.
Release checklist (maintainers)
- Commit + push code to GitHub (WSL clones from here).
solidoc build --docs ./assets --db solidoc/solidoc.db(~40 min; the shippable DB; filepaths stored relative, no machine paths leak).- Commit the DB +
assets/(yes, the 35 MB binary lives in git — it is the release artifact) and push. uv run python solidoc/tests/test_determinism.pyuv run python solidoc/tests/test_installer.pyuv build, then audit: wheel must containsolidoc/solidoc.db, must not contain__pycache__(tests/shipping inside is accepted house practice).- Clean-venv trial:
pip install dist/*.whlin a fresh venv,solidoc serve --helpexits 0, firstsearchcopies the bundled DB to the user path and answers. - Publish, bump version.
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 solidoc_solidjs_mcp-0.2.0.tar.gz.
File metadata
- Download URL: solidoc_solidjs_mcp-0.2.0.tar.gz
- Upload date:
- Size: 7.9 MB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via:
uv/0.12.1 {"installer":{"name":"uv","version":"0.12.1","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":null,"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
82f55a30b953344f0b6dad17a173cdbfe7809e674f9e25fb14de01455f20fa65
|
|
| MD5 |
278904b9e8cc7beeb09d3fd5a7d04736
|
|
| BLAKE2b-256 |
aec143b7c644908b581067622ab222b0c7abc2e733644da55a116649ee817007
|
File details
Details for the file solidoc_solidjs_mcp-0.2.0-py3-none-any.whl.
File metadata
- Download URL: solidoc_solidjs_mcp-0.2.0-py3-none-any.whl
- Upload date:
- Size: 7.9 MB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via:
uv/0.12.1 {"installer":{"name":"uv","version":"0.12.1","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":null,"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
7cd9ee7dcce37c1ae22bf8ba391f990f6d689d046d475a0b50a7b94e8e5064ad
|
|
| MD5 |
3d58c0fd67a932db33efcda5dbe54f28
|
|
| BLAKE2b-256 |
c0188002f1aeecd271d59df48df983a8e31e68cef3b6598371e1d0df6c427aa3
|