Releases: masdevid/naragate
Release list
Naragate v0.9.0 — naragate-mcp --local (embedded engine)
Naragate v0.9.0 — naragate-mcp --local (embedded engine)
The MCP server can now run the engine in its own process, so it needs no
backend process and no NARAGATE_BACKEND_URL:
pip install "naragate-mcp[local]" # Python 3.12+
SECTORS_API_KEY=... naragate-mcp --localLocalEngine starts the same FastAPI engine (uvicorn on a loopback port in a
daemon thread) and every tool routes through the existing REST client at that
in-process base URL — one engine, one Evidence Graph cache, one credit ledger.
Select it with --local, --embedded, or NARAGATE_ENGINE=embedded.
- The optional
[local]extra pullsnaragate-engine(with a
python_version >= "3.12"marker so 3.10/3.11 installs stay resolvable and
can still use a remote backend). - Missing engine → a clear, actionable error.
- Embedded config comes from the environment (
SECTORS_API_KEY,
OLLAMA_BASE_URL,OLLAMA_MODEL); per-user tokens andbind_sectors_key
don't apply to a single local user. - Still prefer a shared engine? Run
naragate-engine(or the
ghcr.io/masdevid/naragate-engineimage) and setNARAGATE_BACKEND_URL—
unchanged.
naragate-mcp 0.6.0. Tests: mode detection, base-URL routing, missing-engine
error, and an in-process integration test that boots the real engine and calls
list_templates / get_setup_status (0 Sectors credits).
Naragate v0.8.0 — Per-user MCP tokens + standalone engine
Naragate v0.8.0 — Per-user MCP tokens + a standalone engine
This release closes the gap between the web UI and non-web agent surfaces.
Per-user API tokens (MCP / skills / agents)
MCP had no cookie, so every non-web run used the backend's deployment key and
shared one credit ledger. Now each user mints a token in Settings → MCP &
API Access (NARAGATE_TOKEN); the backend resolves it to the same email as
the web session, so a non-web run uses your own Sectors key, evidence cache
and credit ledger. Tokens are stored hashed and revocable.
New MCP tools: whoami, get_setup_status, bind_sectors_key, plus full
follow-up Q&A parity — ask_followup, get_followup_suggestions,
next_followup_suggestion. Tool surface: 30 tools (15 high-level + 15
tools.yaml primitives).
Standalone engine (no hosted or Redis dependency)
MCP/skills/agents depend on an engine, never on the hosted domain. The
engine is now a one-command process:
pip install naragate-engine && SECTORS_API_KEY=... naragate-engine
# or
docker run --rm -p 5678:5678 -e SECTORS_API_KEY=... ghcr.io/masdevid/naragate-engineThe Evidence Graph cache degrades to an in-process store when Redis is
unreachable, so the engine runs with zero infrastructure. When no engine
answers, MCP returns an actionable offline hint.
Fixes & docs
- Follow-up chat race condition — template chips are locked while the agent
is still thinking, and the dismiss → answer → replace flow is single-flight. - Reconcile the agent list across all READMEs (agents now match the 13 skills;
addedfilings-agent,follow-up,renderer) and correct the MCP tool count. docker-composenow passes per-agent model overrides (previously dropped).
Naragate v0.7.6 — Teaser Scene 5 screenshot nudge
Teaser Scene 5 — screenshot nudge
The web-UI screenshot now sits 100px right and 20px down from centre
(overflow-hidden wrapper oversized by 200×40, top-left anchored, so the frame is
unchanged and there are no gaps).
Teaser-only change.
Naragate v0.6.2 — Optional API key at login + security hardening
Optional API key at login + input/security hardening
Login
- The login page has an optional "Sectors API Key" field with a helper:
optional — you can add or change this later in Settings. Provide it to bind
immediately, or skip it and set it later. - The IP-bound wording is gone from the login copy (and the leftover IP i18n
strings were removed).
Security
- Narrative input hardened end to end: control characters stripped and
length capped on the client, andmax_lengthenforced by the API
(an 8 kB narrative now returns422). - Bulk analysis also redirects to
/loginwhen there is no session
(single-analysis already did). - Security headers on the frontend:
Content-Security-Policy,
X-Content-Type-Options,X-Frame-Options,Referrer-Policy,
Permissions-Policy. (CSP keeps'unsafe-inline'for the Angular-inlined
CSS; the app has noinnerHTMLsinks, so template escaping stays the
primary XSS defense.)
Backend 406 tests, frontend production build clean.
Naragate v0.5.1 — Auto-renew Sectors account tokens
Sectors account tokens renew automatically
The Usage page's authoritative account block no longer depends on a manually
captured OAuth token.
What changed
- Auto-renewal uses the dashboard's own login:
POST /auth/token/with
email+passwordreturns{refresh, access}— no OAuthclient_id
needed (that was the earlier blocker). Email/password renewal is tried
first; the OAuth refresh grant remains as a fallback. SECTORS_ACCOUNT_EMAIL/SECTORS_ACCOUNT_PASSWORDare passed through
compose; tokens resolve runtime-settings-first, then env.- The manual "paste tokens" modal was dropped — unnecessary now.
Configure
SECTORS_ACCOUNT_EMAIL=you@example.com
SECTORS_ACCOUNT_PASSWORD=…
With these set, the account card self-heals when the access token expires.
Endpoint and rationale documented in references/sectors-account-usage.md.
Backend 406 tests, frontend production build — green. (naragate-mcp unchanged.)
Naragate v0.4.0 — Market enrichment & bilingual results
Market enrichment & bilingual results
Expands the evidence engine with five more Sectors endpoints and makes the
result page fully bilingual.
New evidence (all cache-first — 0 credits on a warm graph)
- Foreign flow (
/v2/foreign-flow) and broker summary (/v2/broker-summary) →flow_summary(net + bias) - Top movers (
/v2/companies/top-changes) → market-wide, day-keyed cache,market_movers(rank + classification) - Revenue segments (
/v2/company/get-segments) →FundamentalEvidence.segments - Index daily (
/v2/index-daily/IHSG) →relative_strength(beta-adjusted stock return, 90-day epoch cache)
Scoring
market_momentum_gap now combines a bounded flow adjustment (±10), mover
membership (±5), and the index-relative move (replaces the raw 1d move when
available), so a stock that lags IHSG is scored as underperformance.
Bilingual
contradictions_i18n— contradictions now carry ID + EN and the verdict
narrative/explanation pick the active language (previously English-only on
the Indonesian page)filings.summary_enadded- New "propped up by flow despite underperformance" note, bilingual
- Results page renders foreign/broker flow, relative strength, and top segment
Docs & parity
- Corrected endpoint paths in
references/ENDPOINTS.md(real API schema) - REST + MCP parity for all five new endpoints;
naragate-mcp→ 0.4.0
Backend 398 tests, MCP 17 tests, frontend production build — all green.
Naragate v0.3.0 — MCP for any agent surface
Naragate v0.3.0 — use it from any agent surface
The headline of this release: Naragate is no longer web-UI-only. The same reality-gap engine now runs through an MCP server, so the exact same experience works on the custom web UI and on Claude Code, Claude Desktop, Cursor, Windsurf, Zed, VS Code, opencode, Codex, or any MCP-capable harness.
🔌 MCP server (new)
- 19 tools exposed over stdio — 9 high-level plus full
skills/*/tools.yamlparity:- High-level:
analyze_narrative,analyze_template,list_templates,get_claim,get_reality_gap,list_history,get_trend_summary,get_policy_precheck,get_usage - Low-level:
sectors_company_report,sectors_subsector_report,sectors_quarterly_financials,sectors_daily_transaction,sectors_news,sectors_corporate_actions,sectors_filings,evidence_cache_get,evidence_cache_merge,llm_complete
- High-level:
- Resources:
naragate://templates,naragate://usage,naragate://history,naragate://claim/{claim_id} - Credit-safe by construction: the MCP server is a thin client over the backend and never calls Sectors directly; a non-web run shares the web UI's Evidence Graph cache (0 extra Sectors calls on a warm cache)
- Parity enforced by tests:
mcp/tests/test_parity.pyasserts every tool declared in anyskills/*/tools.yamlexists on the server - Install:
pip install -e mcp(oruvx naragate-mcp) · config for every harness inmcp/README.md
🧩 Backend
POST /api/v1/analyze— non-streaming counterpart to/stream/evaluate; the single shared entry point for non-web clientsGET /api/v1/templates— the 12 curated narratives as the source of truth for both web tiles and non-web clientsGET/POST/DELETE /api/v1/tools/*— low-level agent primitives (Sectors fetches, Evidence Graph cache, one-shot LLM completion)- Policy detection fix: a policy keyword now wins when the narrative names a member ticker (
HBA … ADRO→ coal,… bijih nikel … INCO→ nickel); unrelated tickers keep the single-ticker path. Added the nickel sector - Policy pre-check is now scoped to the claim's own sector — a coal/nickel result never shows oil-gas names
🧪 Tests
e2e/templates— 13 Playwright tests driving all 12 dashboard templates (SSE mocked): verdict↔band coherence, section-intent, policy section, ticker guardrail (0 credits)e2e/history— read-only live/historycoherence tests, plus an opt-in (RUN_REAL_PIPELINE=1) real-pipeline generator- Backend 347 passed, MCP 17 passed
📚 Docs
- Main README: new "Use Naragate from any MCP agent" section, MCP in the architecture diagram/tech stack/features
skills/andagents/READMEs explaintools.yamland MCP as the portable data layerCONTEXT.md: new MCP Server and Agent Surface domain terms + a no-direct-Sectors rule
⛽ Credits
Non-web surfaces add zero Sectors cost: MCP tools route through the same backend pipeline and cache, and cache-only tools never touch Sectors. Parity/credit-safety are covered by tests.
Naragate v0.2.0
Policy Amplifier + dashboard scanner.
Backend (#9, T1-T7)
- T1 pre-check: policy→price signal validation across 5 curated tickers (cached-only GET /api/v1/precheck, zero-cost re-runs via epoch chunk cache, ?refresh=true opt-in)
- 5 verified policy events (BBM 2025-10-01, HBA 2025-12-01, APBN subsidy 2026-01-22, Q2-26 tariff window, DMO cap 2026-06-22)
- Sector resolver, sector evidence, policy event labeling, re-score trigger, retrospective case study tooling
Frontend (#10)
- Single/Bulk scan toggle + 12 curated narrative tiles
- Policy pre-check results panel with verdict chip, beacon table, and verified policy-event list
Naragate v0.1.0
Initial release of Naragate — an AI evidence engine that detects financial claims in Indonesian market narratives and verifies them against Sectors v2 financial data.
Features
- Claim Parser — LLM extraction of structured claims (ticker, assertion, category, direction, confidence) from Indonesian narratives
- Evidence Agents — valuation, fundamental, market, news, corporate actions, and insider-trading filings evidence via the Sectors v2 API
- Skeptic Agent — challenges claims with negation bias
- Evidence Judge & Score Generator — Reality Gap score (0–100) with verdict, including insider-bias-gap scoring and contradiction detection
- SSE streaming pipeline — live claim → evidence → skeptic → judge → score events
- Angular frontend — dashboard, claim analysis, results, history, settings, usage pages; responsive nav with mobile hamburger menu; EN/ID i18n
- Sectors v2 integration — caching, credit-budget tracking, graceful degradation, partially-masked API key input (first/last 2 chars visible)
- Docker Compose deployment with loopback-bound ports
Quality
- 145 backend tests passing (parser, evidence agents, judge, pipeline, API, sectors client, filings agent)
- Multi-agent skills packaged under
skills/andagents/