mcpField
A
Artha Council

Artha Council

Local
github.com/akira231097Finance1Updated 11w ago

About Artha Council

Artha Council is an AI-assisted equity research and portfolio automation system for operators evaluating US and Indian cash equities. It separates analyst judgment from broker execution, with auditable evidence and fail-closed order gates.

Key features

  1. 01Broad-universe stock ranking
  2. 02Independent analyst debate and synthesis
  3. 03Investment thesis and position monitoring
  4. 04Broker-aware execution checks
  5. 05Fail-closed order and reconciliation controls
  6. 06Audit records for state changes

Use cases

  1. 01Screen and rank equity candidates
  2. 02Review investment theses with analyst roles
  3. 03Monitor holdings and trigger sell reviews
  4. 04Check broker conditions before order placement

MCP support

The MCP server exposes research and broker-related capabilities to MCP hosts. It supports local stdio or stateless Streamable HTTP behind OAuth and TLS, and starts read-only with its kill switch engaged.

Configuration

Local server config is the same for every client. Copy it into your client’s MCP config file.

mcp.json · Universal config
{
"mcpServers": {
"akira231097-artha-council": {
"command": "docker",
"args": [
"run",
"-i",
"--rm",
"-e",
"ARTHA_MCP_MARKET",
"-e",
"ARTHA_MCP_BROKER",
"-e",
"ARTHA_MCP_RESEARCH_MODE",
"-e",
"ARTHA_MCP_DATA_DIR",
"-e",
"ARTHA_MCP_ACCESS_MODE",
"-e",
"ARTHA_MCP_OPERATIONS_ENABLED",
"-e",
"ARTHA_MCP_TRADING_ENABLED",
"-e",
"ARTHA_MCP_KILL_SWITCH",
"-e",
"ARTHA_MCP_MAX_ORDER_VALUE",
"-e",
"ARTHA_MCP_MAX_DAILY_ORDER_VALUE",
"-e",
"ARTHA_MCP_MAX_DAILY_ORDERS",
"-e",
"ARTHA_MCP_MAX_PENDING_JOBS",
"-e",
"FMP_API_KEY",
"-e",
"FINNHUB_API_KEY",
"-e",
"GOOGLE_API_KEY",
"-e",
"TELEGRAM_BOT_TOKEN",
"-e",
"TELEGRAM_CHAT_ID",
"-e",
"UPSTOX_ACCESS_TOKEN",
"-e",
"UPSTOX_SANDBOX_ACCESS_TOKEN",
"-e",
"ARTHA_INDIA_STATIC_IP_REGISTERED",
"-e",
"ARTHA_INDIA_DEMAT_SELL_AUTHORIZED",
"-e",
"ARTHA_UPSTOX_ALGO_NAME",
"-e",
"KITE_API_KEY",
"-e",
"KITE_ACCESS_TOKEN",
"ghcr.io/akira231097/artha-council-mcp:1.4.0"
],
"env": {
"ARTHA_MCP_MARKET": "<ARTHA_MCP_MARKET>",
"ARTHA_MCP_BROKER": "<ARTHA_MCP_BROKER>",
"ARTHA_MCP_RESEARCH_MODE": "<ARTHA_MCP_RESEARCH_MODE>",
"ARTHA_MCP_DATA_DIR": "<ARTHA_MCP_DATA_DIR>",
"ARTHA_MCP_ACCESS_MODE": "<ARTHA_MCP_ACCESS_MODE>",
"ARTHA_MCP_OPERATIONS_ENABLED": "<ARTHA_MCP_OPERATIONS_ENABLED>",
"ARTHA_MCP_TRADING_ENABLED": "<ARTHA_MCP_TRADING_ENABLED>",
"ARTHA_MCP_KILL_SWITCH": "<ARTHA_MCP_KILL_SWITCH>",
"ARTHA_MCP_MAX_ORDER_VALUE": "<ARTHA_MCP_MAX_ORDER_VALUE>",
"ARTHA_MCP_MAX_DAILY_ORDER_VALUE": "<ARTHA_MCP_MAX_DAILY_ORDER_VALUE>",
"ARTHA_MCP_MAX_DAILY_ORDERS": "<ARTHA_MCP_MAX_DAILY_ORDERS>",
"ARTHA_MCP_MAX_PENDING_JOBS": "<ARTHA_MCP_MAX_PENDING_JOBS>",
"FMP_API_KEY": "<FMP_API_KEY>",
"FINNHUB_API_KEY": "<FINNHUB_API_KEY>",
"GOOGLE_API_KEY": "<GOOGLE_API_KEY>",
"TELEGRAM_BOT_TOKEN": "<TELEGRAM_BOT_TOKEN>",
"TELEGRAM_CHAT_ID": "<TELEGRAM_CHAT_ID>",
"UPSTOX_ACCESS_TOKEN": "<UPSTOX_ACCESS_TOKEN>",
"UPSTOX_SANDBOX_ACCESS_TOKEN": "<UPSTOX_SANDBOX_ACCESS_TOKEN>",
"ARTHA_INDIA_STATIC_IP_REGISTERED": "<ARTHA_INDIA_STATIC_IP_REGISTERED>",
"ARTHA_INDIA_DEMAT_SELL_AUTHORIZED": "<ARTHA_INDIA_DEMAT_SELL_AUTHORIZED>",
"ARTHA_UPSTOX_ALGO_NAME": "<ARTHA_UPSTOX_ALGO_NAME>",
"KITE_API_KEY": "<KITE_API_KEY>",
"KITE_ACCESS_TOKEN": "<KITE_ACCESS_TOKEN>"
}
}
}
}
Run commanddocker run -i --rm -e ARTHA_MCP_MARKET -e ARTHA_MCP_BROKER -e ARTHA_MCP_RESEARCH_MODE -e ARTHA_MCP_DATA_DIR -e ARTHA_MCP_ACCESS_MODE -e ARTHA_MCP_OPERATIONS_ENABLED -e ARTHA_MCP_TRADING_ENABLED -e ARTHA_MCP_KILL_SWITCH -e ARTHA_MCP_MAX_ORDER_VALUE -e ARTHA_MCP_MAX_DAILY_ORDER_VALUE -e ARTHA_MCP_MAX_DAILY_ORDERS -e ARTHA_MCP_MAX_PENDING_JOBS -e FMP_API_KEY -e FINNHUB_API_KEY -e GOOGLE_API_KEY -e TELEGRAM_BOT_TOKEN -e TELEGRAM_CHAT_ID -e UPSTOX_ACCESS_TOKEN -e UPSTOX_SANDBOX_ACCESS_TOKEN -e ARTHA_INDIA_STATIC_IP_REGISTERED -e ARTHA_INDIA_DEMAT_SELL_AUTHORIZED -e ARTHA_UPSTOX_ALGO_NAME -e KITE_API_KEY -e KITE_ACCESS_TOKEN ghcr.io/akira231097/artha-council-mcp:1.4.0
Environment variables to set
ARTHA_MCP_MARKETMarket profile: US or IN.
ARTHA_MCP_BROKERBroker adapter: snapshot, upstox, zerodha, none, or plugin.
ARTHA_MCP_RESEARCH_MODEResearch boundary: embedded, host_orchestrated, or plugin. India should use host_orchestrated or a market-native plugin.
ARTHA_MCP_DATA_DIRPersistent directory for journals, receipts, jobs, portfolio state, and audit artifacts.
ARTHA_MCP_ACCESS_MODECapability mode: read_only, operator, or trading. Defaults to read_only.
ARTHA_MCP_OPERATIONS_ENABLEDExplicit operations switch. Defaults to false.
ARTHA_MCP_TRADING_ENABLEDExplicit live-trading switch. Defaults to false.
ARTHA_MCP_KILL_SWITCHFinal MCP placement kill switch. Defaults to true.
ARTHA_MCP_MAX_ORDER_VALUEMaximum value of one order in the selected market currency. Defaults to 25 USD or 2500 INR.
ARTHA_MCP_MAX_DAILY_ORDER_VALUEMaximum total daily order value in the selected market currency. Defaults to 50 USD or 5000 INR.
ARTHA_MCP_MAX_DAILY_ORDERSMaximum number of broker placements per market day. Defaults to 2.
ARTHA_MCP_MAX_PENDING_JOBSMaximum queued or running allowlisted workflows. Defaults to 8 and prevents an unbounded work queue.
FMP_API_KEYSecretOptional Financial Modeling Prep key for embedded US research.
FINNHUB_API_KEYSecretOptional Finnhub key for embedded US research enrichment.
GOOGLE_API_KEYSecretOptional Google Gemini key for embedded Council roles and web-grounded research.
TELEGRAM_BOT_TOKENSecretOptional Telegram bot token for Artha notifications.
TELEGRAM_CHAT_IDSecretOptional Telegram destination used with TELEGRAM_BOT_TOKEN.
UPSTOX_ACCESS_TOKENSecretUpstox live account/read token used for portfolio, quote, margin, and fee proof.
UPSTOX_SANDBOX_ACCESS_TOKENSecretSeparate Upstox sandbox token, required only when ARTHA_UPSTOX_SANDBOX=true.
ARTHA_INDIA_STATIC_IP_REGISTEREDOperator attestation that this deployment IP is registered with the selected Indian broker.
ARTHA_INDIA_DEMAT_SELL_AUTHORIZEDSecretOperator attestation that required demat authorization is valid for Indian delivery sells.
ARTHA_UPSTOX_ALGO_NAMEOptional exchange-approved algo name configured in the Upstox app.
KITE_API_KEYSecretRequired only for the Zerodha adapter.
KITE_ACCESS_TOKENSecretRequired only for the Zerodha adapter.

Local servers need a runtime on your machine (e.g. Node.js 18+). Config file locations differ by client; see your client’s docs.

Packages
ocighcr.io/akira231097/artha-council-mcp:1.4.0

Tools

No tool list yet

Local servers expose tools only once running on your machine, and the maintainer has not provided a tool list.

Details

From the project README

Artha Council

Artha CI CodeQL OpenSSF Scorecard License

Artha is an AI-assisted equity research and portfolio automation system. It narrows a broad US-stock universe, ranks opportunities, asks independent analyst roles to debate the strongest candidates, monitors active investment theses, and uses deterministic broker gates before an order can proceed.

Version 1.4 hardens the MCP server with source/build provenance for portable local or OAuth-protected remote access. It supports the existing US workflow and market-aware broker adapters for Indian cash equities without treating US research as India data. India adapters provide broker-verified instrument lookup and fail-closed, whole-share delivery limit execution with current static-IP requirements.

Created and maintained by Sarath (@akira231097).

See the design notes and architecture diagram for a visual walkthrough of the research, Council, execution, and audit boundaries.

Artha is research software, not financial advice. Public defaults cannot place live trades. Anyone enabling broker integration is responsible for reviewing the source, their configuration, broker terms, and applicable requirements.

Why Artha Exists

Most stock screeners stop after ranking tickers. Artha treats investing as a stateful operating system:

  1. Find candidates from a large universe.
  2. Verify data quality and execution feasibility.
  3. Give scarce Council attention to the strongest candidates.
  4. Separate investment judgment from order execution.
  5. Monitor every held thesis and send material changes to a sell Council.
  6. Reconcile intended actions against broker state.
  7. Preserve evidence and state transitions for audit.

System Pipeline

Market data providers
  -> universe and promotion funnel
  -> investment sanity checks
  -> broker-aware candidate router
  -> opportunity scout
  -> fundamental / technical / risk analysts
  -> CIO synthesis
  -> execution officer
  -> deterministic broker review and placement gates
  -> reconciliation, thesis tracking, Telegram, supervisor

The sell side runs independently of new-buy capacity:

Portfolio snapshot
  -> position and thesis monitor
  -> deterministic stop / invalidation triggers
  -> sell Council for judgment decisions
  -> execution officer
  -> broker review and exact-order placement gate
  -> post-fill reconciliation

Important Design Rules

Research is not execution

The Council answers: "Is this investment attractive?"

The execution layer answers: "Can this exact order be placed safely now?"

A good company can be temporarily unbuyable because the quote is stale, the spread is too wide, the price moved above the approved cap, or broker review is incomplete. Those conditions do not rewrite the investment thesis.

Missing broker proof blocks an order

Money-moving paths fail closed. A model statement that a check passed is not enough; Artha requires the decisive structured broker output.

Portfolio monitoring continues when buys pause

Position limits and invested-capacity limits pause new buys only. Monitoring, sell review, reconciliation, health checks, and alerts continue running.

Major Components

  • artha/funnel.py - broad-universe promotion and multi-sleeve ranking.
  • artha/broker_router.py - quote, liquidity, tradability, and data feasibility.
  • artha/opportunity_scout.py - agentic pre-Council evidence review and ranking.
  • artha/council.py - analyst roles, score audit, and CIO synthesis.
  • artha/execution_officer.py - Stage A and Stage B execution reasoning.
  • artha/alpha_shadow.py - non-authoritative alpha experiments and outcome tracking.
  • artha/broker_capacity.py - portfolio and daily buy-capacity calculations.
  • artha/stand_down.py - buy-only pause and next-session reset behavior.
  • artha/sell_engine.py - position triggers and sell-side orchestration.
  • artha/sell_council.py - hold, trim, and exit review.
  • artha/position_classification.py - broker-position sector and industry repair.
  • artha/execution_learning.py - post-trade execution-quality measurements.
  • artha/fill_finalizer.py - broker-fill accounting and idempotent state finalization.
  • artha/robinhood_bridge.py - broker handoff, review, clearance, and reconciliation.
  • artha/scheduler.py - scheduled scans and lifecycle orchestration.
  • artha/supervisor.py - production health and readiness checks.
  • artha_mcp/ - MCP tools, resources, prompts, authorization, jobs, redaction, research adapters, exact-order receipts, and broker reconciliation.
  • dashboard/ - local operator dashboard.

See Architecture for the complete component map.

Quick Start

Requirements: Python 3.12 or newer and Node.js 20 or newer.

git clone https://github.com/akira231097/artha-council.git
cd artha-council
python -m venv .venv
source .venv/bin/activate
python -m pip install --upgrade pip
pip install -e .
npm ci
cp .env.example .env

Add your own provider credentials to .env. Keep every Robinhood setting at its safe default while evaluating the system.

python run.py overview
python run.py analyze AAPL MSFT V
python run.py broker-router-preview --assume-market-open --no-persist
python run.py supervise
artha-mcp --check
MCP

Connect any MCP-compatible host through local stdio using .mcp.json.example, or deploy stateless Streamable HTTP behind OAuth and TLS. The server starts read-only with its kill switch engaged.

artha-mcp

The user supplies their own model subscriptions, data subscriptions, broker credentials, and notification credentials. The MCP server never provides or shares the maintainer's accounts. See Artha MCP and India Support for the exact capability and safety boundary. See MCP Updates for release fingerprints, rolling versus stable channels, and the fail-closed local-source promotion path.

Verification

python -m compileall -q artha artha_mcp dashboard run.py
python -m unittest discover -s tests -t . -v
python scripts/check_release_integrity.py
python -m artha.test_enhancements
python -m artha.test_alpha_pipeline_hardening
python -m artha.test_production_hardening
python -m artha.test_feedback_loop_hardening

Tests use synthetic fixtures and must not require real broker credentials.

Docker

The included image supports the core Python research CLI:

docker build -t artha-council .
docker run --rm --env-file .env artha-council overview

The broker snapshot helper is intentionally outside this minimal Python image; it requires a separately configured Node.js MCP runtime and broker access.

Dockerfile.mcp builds the non-root MCP image. The main image tag is refreshed after each tested default-branch update; release versions remain immutable.

Public Release Boundary

This repository contains source, tests, documentation, and safe configuration templates. It intentionally excludes:

  • API keys, OAuth tokens, and .env files
  • broker account identifiers and snapshots
  • portfolios, order history, and transaction records
  • SQLite journals and runtime state
  • generated dossiers, traces, reports, and logs
  • Telegram tokens, chat identifiers, and callback tokens
  • local OpenClaw, launchd, and workstation configuration
  • third-party market-data payloads

Third-party data and services remain governed by their own licenses and terms. The Apache license covers Artha's source code, not provider data or broker access.

Project Documents

License and Citation

Artha Council is licensed under Apache License 2.0. Distributed copies and modifications must retain the applicable license, copyright, and attribution notices described in NOTICE.

Use CITATION.cff to cite the project. GitHub exposes it through the repository's Cite this repository control.

Comments

Markdown supported

New to MCP?

From what the protocol is to installing your first server, these answers cover most first questions.

An open protocol that defines how AI applications connect to external tools and data in a uniform way. Clients talk to the model; MCP servers provide tools, resources and prompt templates. They exchange standard messages, so one server can be reused by many clients.