Python client for the Koshi MCP server — retrieval, memory, context, and quality tools for any LLM workflow. Auto-downloads a native AOT binary; no .NET install required.
Project description
koshi
Python client for the Koshi MCP server. Retrieval, memory, context engineering, and quality scoring for any LLM workflow — 24 tools, all wrapped as Pythonic methods.
No
.NET installrequired. The first call auto-downloads a small native AOT binary (~15 MB) into your user cache.
Install
pip install koshi
Requires Python 3.10+ on Linux x64/arm64, macOS x64/arm64, or Windows x64/arm64. Zero runtime dependencies — every byte is Python stdlib.
Quick start
from koshi import Client
with Client() as koshi:
print(koshi.version()) # diagnostics
koshi.index_directory("/path/to/your/repo") # BM25 index of all text files
print(koshi.search("auth pattern", top_k=5)) # ranked retrieval
koshi.remember(content="JWT tokens expire after 1h",
subject="auth", type="Decision")
print(koshi.recall("auth")) # memory recall with recency + confidence
The first Client() call:
- Detects your OS/CPU.
- Looks for the matching
koshi-mcpbinary inKOSHI_BIN→ versioned cache →PATH→ GitHub release. - Downloads, verifies SHA-256 (hashes are baked into the wheel — supply-chain safe), caches under your user cache dir.
- Spawns it as a subprocess, performs the MCP
initializehandshake. - Confirms the server's reported version matches the Python package version exactly. Mismatch raises
IncompatibleBinaryError.
The 24 tools
| Group | Methods |
|---|---|
| Retrieval | index_directory, index, search, list_indexed, clear_index |
| Memory | remember, recall, forget, memory_stats, clear_memories, capture_turn, memory_export_to_vault, memory_import_from_vault, memory_sync_vault |
| Context | compile_context, token_count, budget_plan |
| Team / Quality | register_team, score_turn, team_dashboard, analyze_feedback, list_teams |
| Diagnostics | version, health |
Every method returns the formatted text response from the MCP server. The full Koshi tool reference lives in the main README.
Environment variables
| Var | Effect |
|---|---|
KOSHI_BIN |
Path to a koshi-mcp binary. Skips auto-download, overrides PATH lookup. Version still verified at spawn time. |
KOSHI_MEMORY_FILE |
Persist memories to this JSON file across server restarts. Default: in-memory only. |
KOSHI_INDEX_PATH |
Default directory for search / index_directory if you don't pass one. |
KOSHI_INDEX_FILE |
Persist the BM25 retrieval index to this JSON file across server restarts. Auto-loads on first search; stale snapshots are invalidated by a (relpath, size, mtime) fingerprint check. Default: in-memory only. |
Where binaries live
| OS | Cache path |
|---|---|
| Linux | $XDG_CACHE_HOME/koshi/bin/<version>/ or ~/.cache/koshi/bin/<version>/ |
| macOS | ~/Library/Caches/koshi/bin/<version>/ |
| Windows | %LOCALAPPDATA%\koshi\bin\<version>\ |
The version is part of the path, so upgrading pip install -U koshi does not invalidate the cache for older Python projects pinned to an older koshi version.
Air-gapped / offline
Download the binary that matches your platform from a GitHub release of Koshi on a machine with internet, copy it onto the target machine, and point KOSHI_BIN at it. The version must match the installed koshi Python package exactly.
Error handling
from koshi import (
Client,
KoshiError, # base class
BinaryNotFoundError, # nothing on disk + download failed
IncompatibleBinaryError, # version mismatch
BinaryCorruptedError, # SHA-256 mismatch
UnsupportedPlatformError, # no AOT artifact for this OS/CPU
ProtocolError, # malformed MCP message
ToolError, # tool returned an error response
KoshiTimeoutError, # request took longer than client.timeout
)
Why this exists
Koshi's engine is .NET. That's a deliberate choice — the runtime gets us best-in-class JSON, threading, and a great MCP SDK. But it's also adoption friction: most MCP users live in Python.
koshi (Python) closes the gap. You pip install koshi and never think about .NET. Under the hood, you're talking to the same engine the .NET ecosystem uses (Koshi.Mcp on NuGet), wire-compatible byte-for-byte.
Links
- Source & issues: https://github.com/jsharma1105/Koshi
- Release binaries: https://github.com/jsharma1105/Koshi/releases
- NuGet (.NET tool): https://www.nuget.org/packages/Koshi.Mcp
- Changelog: https://github.com/jsharma1105/Koshi/blob/main/CHANGELOG.md
License
MIT — see LICENSE.
Project details
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 koshi-0.8.0.tar.gz.
File metadata
- Download URL: koshi-0.8.0.tar.gz
- Upload date:
- Size: 12.5 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.13
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
61a5f77f25158d201d1091993c7500397f1d0fc927cdfe78fa9546afd61ea74c
|
|
| MD5 |
f10e4b5d3ff7dc6b8ef1b805b15f553e
|
|
| BLAKE2b-256 |
51204b2fc2afb5b88da57c4dd71e3e26f089fcfbacc87713365f13ca52abc828
|
File details
Details for the file koshi-0.8.0-py3-none-any.whl.
File metadata
- Download URL: koshi-0.8.0-py3-none-any.whl
- Upload date:
- Size: 14.3 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.13
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
b6329fa30b48d8e5aafe73933b5244b7e211287ac095ae5dbd0439122743c318
|
|
| MD5 |
52c2084ed9f1b240dfcebbe6898b1fd3
|
|
| BLAKE2b-256 |
b51c28bb29c87b0885e75c9ec2bfb1b985d0492beb75e6ae1fbdc7393ad704ba
|