Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
11 changes: 6 additions & 5 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,9 +5,10 @@

mcp-name: io.github.negillett/alloc-context

**Portfolio-aware crypto context for agents** — discover holdings, market,
sentiment, macro, and regime; optional allocation analysis. Deterministic
JSON over MCP with x402 pay-per-call on Base.
**Portfolio-aware crypto context for whatever you hold** — discover your
holdings, holdings-scoped market data, sentiment, macro, and regime; optional
allocation analysis when you supply targets. Deterministic JSON over MCP with
x402 pay-per-call on Base.

> **Privacy:** nothing stored · one-time read-only · pass-through only — your
> keys and portfolio never persist on our servers. See [USE.md](docs/USE.md).
Expand Down Expand Up @@ -69,7 +70,7 @@ Not financial advice.
| **Discovery** | [llms.txt](https://mcp.alloc-context.com/llms.txt), [x402 manifest](https://mcp.alloc-context.com/.well-known/x402.json) |
| **Pricing** | **$0.02** cached context/math · **$0.05** live ingest or portfolio |
| **Payment** | x402 on Base — USDC or EURC |
| **Market scope** | Holdings-scoped (BTC/ETH OHLC; alt quote snapshots); bridge auto-scopes from portfolio |
| **Market scope** | Tailored to your holdings (band OHLC for BTC/ETH; alt quote snapshots); bridge auto-scopes from portfolio |

Agents and wallets connect directly to the hosted endpoint — see
[agent-integration.md](docs/agent-integration.md). The Cursor bridge above
Expand All @@ -86,7 +87,7 @@ combines local portfolio reads with this upstream for market context.
| `get_rebalance_plan` | USD rebalance moves from allocation, target, and NAV |
| `check_allocation_band` | Drift vs target and whether allocation is outside the band |
| `check_allocation_bands` | Batch band checks for multiple target scenarios |
| `get_portfolio_state` | Live NAV and holdings from Kraken or Coinbase |
| `get_portfolio_state` | Live NAV and holdings (e.g. Coinbase, Kraken read-only keys) |

Market context is **holdings-scoped**: band assets (BTC/ETH) use OHLC bars; alt
holdings (e.g. HYPE) use quote snapshots when cached. The bridge auto-scopes
Expand Down
16 changes: 9 additions & 7 deletions alloccontext/mcp/bazaar.py
Original file line number Diff line number Diff line change
Expand Up @@ -107,10 +107,11 @@
)

LISTING_DESCRIPTION = (
"Portfolio-aware crypto context for AI agents: discover holdings, market, "
"sentiment, macro, and regime; optional allocation analysis and rebalance "
"math. Fused backdrop (Fear & Greed, Kalshi, ETF flows), optional live "
"Kraken/Coinbase reads. Structured JSON only — no LLM. "
"Portfolio-aware crypto context for AI agents: discover holdings and "
"holdings-scoped market, sentiment, macro, and regime; optional allocation "
"analysis and rebalance math. Fused backdrop (Fear & Greed, Kalshi, ETF "
"flows), optional live portfolio reads (e.g. Coinbase, Kraken). Structured "
"JSON only — no LLM. "
f"{PRIVACY_COMPACT_COPY} "
"Source-available (Elastic License 2.0); self-host friendly; official hosted "
f"MCP at {OFFICIAL_HOSTED_MCP_URL} — see {USE_DOCS_PATH}."
Expand Down Expand Up @@ -237,9 +238,10 @@
"tool_name": "get_portfolio_state",
"description": (
"Fetch live read-only portfolio NAV, holdings[], and band weights from "
"Kraken or Coinbase credentials passed in this call (never stored). "
"Requires exchange, api_key, and api_secret. Returns available=false "
"with reason on invalid credentials — no side effects."
"a supported spot exchange (e.g. Kraken, Coinbase) using credentials "
"passed in this call (never stored). Requires exchange, api_key, and "
"api_secret. Returns available=false with reason on invalid "
"credentials — no side effects."
),
"input_schema": {
"type": "object",
Expand Down
3 changes: 2 additions & 1 deletion alloccontext/mcp/server.py
Original file line number Diff line number Diff line change
Expand Up @@ -209,7 +209,8 @@ def get_rebalance_plan(
annotations=_tool_hints("get_portfolio_state"),
description=(
"Fetch live read-only portfolio NAV, holdings[], and band weights from "
"Kraken or Coinbase credentials passed in this call (never stored). "
"a supported spot exchange (e.g. Kraken, Coinbase) using credentials "
"passed in this call (never stored). "
"Requires exchange, api_key, and api_secret. Use get_context_bundle "
"for cached market and history without exchange keys. Optional "
"target_pct attaches allocation_analysis; optional band sets drift "
Expand Down
12 changes: 6 additions & 6 deletions docs/distribution.md
Original file line number Diff line number Diff line change
Expand Up @@ -13,18 +13,18 @@ Use this for directory forms, community posts, and registry descriptions.

```text
AllocContext — portfolio-aware crypto context for AI agents over MCP. Discover
holdings, market, sentiment, macro, and regime; optional allocation
analysis. Privacy: nothing stored; one-time read-only; pass-through only.
Source-available (Elastic License 2.0); self-host friendly. Official hosted MCP:
https://mcp.alloc-context.com/mcp — see docs/USE.md. x402 on Base ($0.02 cached
/ $0.05 live).
holdings and holdings-scoped market, sentiment, macro, and regime; optional
allocation analysis. Privacy: nothing stored; one-time read-only; pass-through
only. Source-available (Elastic License 2.0); self-host friendly. Official
hosted MCP: https://mcp.alloc-context.com/mcp — see docs/USE.md. x402 on Base
($0.02 cached / $0.05 live).
```

## GitHub repository metadata

| Field | Value |
|-------|-------|
| **Description** | Portfolio crypto context MCP for agents — holdings, market, optional drift. Hosted: https://mcp.alloc-context.com/mcp (x402). ELv2. |
| **Description** | Portfolio crypto context MCP — holdings-scoped market for agents. Hosted: https://mcp.alloc-context.com/mcp (x402). ELv2. |
| **Topics** | `mcp`, `x402`, `bitcoin`, `ethereum`, `model-context-protocol`, `agents`, `portfolio` |
| **Website** | `https://mcp.alloc-context.com/llms.txt` |

Expand Down
12 changes: 6 additions & 6 deletions pyproject.toml
Original file line number Diff line number Diff line change
@@ -1,24 +1,24 @@
[project]
name = "alloc-context"
version = "0.2.2"
description = "Portfolio-aware crypto context for agents — holdings, market, optional allocation analysis"
description = "Portfolio-aware crypto context for agents — holdings-scoped market, sentiment, optional allocation analysis"
readme = "README.md"
license = { text = "Elastic-2.0" }
requires-python = ">=3.11"
keywords = [
"mcp",
"x402",
"bitcoin",
"ethereum",
"holdings",
"portfolio",
"crypto",
"cryptocurrency",
"portfolio",
"bitcoin",
"ethereum",
"agents",
"allocation",
"holdings",
"rebalance",
"coinbase",
"kraken",
"agents",
]
classifiers = [
"Development Status :: 4 - Beta",
Expand Down
2 changes: 1 addition & 1 deletion server.json
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
"$schema": "https://static.modelcontextprotocol.io/schemas/2025-12-11/server.schema.json",
"name": "io.github.negillett/alloc-context",
"title": "AllocContext",
"description": "Holdings-scoped MCP: Coinbase/Kraken portfolio, alt quotes, drift. x402 hosted. ELv2.",
"description": "Portfolio-aware MCP: holdings-scoped crypto context for agents. Market, sentiment. x402. ELv2.",
"websiteUrl": "https://mcp.alloc-context.com/llms.txt",
"repository": {
"url": "https://github.com/negillett/alloc-context",
Expand Down
Loading