TradeMCP
TradeMCP is a read-only MCP server for Indian equities that provides market data, technical and fundamental analysis, stock screening, and portfolio analytics.
Search NSE/BSE stocks by ticker, company name, ISIN, or index alias.
Fetch live/delayed quotes, OHLCV price history, index snapshots, and market breadth.
Compute 57+ technical indicators, composite buy/sell signals, candlestick patterns, risk statistics, and support/resistance levels.
Retrieve fundamentals, valuation metrics, 54 ratios, DuPont analysis, 0–100 health scores, and annual/quarterly financial statements.
Compare 2–5 stocks side by side on price, valuation, quality, and momentum.
Screen NIFTY 50/100/500 or the NSE universe with fundamental and technical filters.
Analyze portfolios for valuation, P&L, allocation, concentration, per-holding signals, benchmark risk, and risk flags.
Return results as markdown or JSON via all tools.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@TradeMCPshow RELIANCE live quote, RSI and 52-week range"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
TradeMCP — Indian Market Intelligence MCP Server
A free Model Context Protocol server for Indian equities (NSE/BSE). It gives an AI agent 14 tools covering live quotes, OHLCV history, 57 technical indicators, full fundamental ratios, financial statements, screeners and portfolio analytics.
No API keys. No paid subscriptions. No account. Every number comes from free public endpoints.
Demo → aswathas.github.io/TradeMCP — the server's own output, served from a saved snapshot.
Install
From source — works today:
git clone https://github.com/aswathas/TradeMCP.git
cd TradeMCP
python -m venv .venv
.venv\Scripts\activate # Windows
source .venv/bin/activate # macOS / Linux
pip install -e ".[dev]"Then point your MCP client at the server you just installed — see Connect to your MCP client below.
Requires Python 3.11+. Two runtime dependencies: mcp and httpx — pydantic comes along as
mcp's own dependency (pyproject.toml pins it explicitly). The dev extra adds pytest for
the test suite.
The npm package — waiting on publish
The npm package is written and tested, but it is not on the registry yet, so this command will not resolve yet:
npx -y @aswathas/trademcpOnce it is published it becomes the one-command install: the package carries the Python server and builds its own environment on first run, so all you need is Node 18+ and Python 3.11+.
First run takes about half a minute (it builds that environment), after which the server
starts in about a second. If your MCP client has a short start-up timeout, install the package
once globally so the build happens at install time, then point the client at the trademcp
command:
npm i -g @aswathas/trademcp{ "mcpServers": { "trademcp": { "command": "trademcp" } } }Claude Code, once the package is published:
claude mcp add trademcp -- npx -y @aswathas/trademcpOr run the helper script (repository only — it is not in the npm package):
.\scripts\install.ps1 # Windows./scripts/install.sh # macOS / LinuxRelated MCP server: Tapetide - Indian Stock Market MCP
Showcase
A demo page built from the server's own output. Every figure on it is the server's own — the live board recomputes indicators in the browser from the same raw candles the server returned. The hosted copy is static, so it serves that output from a saved snapshot and labels itself SNAPSHOT on screen; running the server locally is what makes it live.
The image URLs are absolute on purpose: the npm package ships only the server, so relative
showcase/... paths would render as broken images on the npm page.
Run it locally (repository only) — the page calls /api/* on that server, which calls the MCP
tools themselves:
pip install -e .
python scripts/serve_showcase.py --port 8099
# → http://127.0.0.1:8099/To republish the demo after changing showcase/site (repository only):
.\scripts\deploy_pages.ps1That copies showcase/site onto the gh-pages branch, which is what GitHub Pages serves. The
branch is a build artefact — showcase/site stays the single source of truth.
Free data sources
Source | Used for | Why it works without a key |
Yahoo Finance | prices, volumes, quotes, statements, trailing ratios | Public endpoints; the quote/summary APIs only need a free cookie+crumb handshake, done automatically |
NSE India static CSV listings ( | symbol universe, company names, ISIN, industry | Static files, not behind the bot protection that guards NSE's live JSON API |
Screener.in | India-specific ratios: ROCE, ROE, promoter/FII/DII holding, working-capital days | Public company pages, parsed defensively and treated as optional |
All ratios are computed locally from the raw statement lines rather than copied off a screen, so the numbers are consistent and auditable.
Connect to your MCP client
Claude Desktop
%APPDATA%\Claude\claude_desktop_config.json (Windows) or
~/Library/Application Support/Claude/claude_desktop_config.json (macOS):
{
"mcpServers": {
"trademcp": {
"command": "C:\\path\\to\\TradeMCP\\.venv\\Scripts\\python.exe",
"args": ["-m", "trademcp"]
}
}
}MiniMax Code (MCode)
{
"mcpServers": {
"trademcp": {
"command": "C:\\path\\to\\TradeMCP\\.venv\\Scripts\\python.exe",
"args": ["-m", "trademcp"]
}
}
}Cursor / VS Code / Windsurf
Same mcpServers block in ~/.cursor/mcp.json or .vscode/mcp.json.
Replace the
commandpath with your own. If you installed withpip install -e .globally,"command": "trademcp"and"args": []also works.
Via npm (once the package is published)
{
"mcpServers": {
"trademcp": {
"command": "npx",
"args": ["-y", "@aswathas/trademcp"]
}
}
}The tools
All tools are read-only, accept response_format (markdown default, or json), and take an NSE
symbol or a company name ("RELIANCE", "tata motors", "NSE:TCS", "RELIANCE.NS", an ISIN, or an index alias).
Market
Tool | What it does |
| Search NSE listings by ticker or company name → code, name, ISIN, series |
| Last price, day change/range, volume, 52-week range & position, market cap, P/E, P/B, EPS, dividend yield, beta, 1w/1m/3m/6m/1y returns |
| OHLCV candles (bars of 1d/1wk/1mo, or intraday 1h/30m/15m/5m, over a 1mo–max window) + period return, high/low, volume |
| NIFTY 50, SENSEX, 12 NIFTY sector indices (Bank, IT, Auto, FMCG, Pharma, Realty, Metal, Energy, PSU Bank, Private Bank, Financial Services, Media), INDIA VIX — 15 by default. Yahoo does not publish Nifty Private Bank, so that one comes back under |
| Advancers/decliners, A/D ratio, average & median move, top gainers/losers, % above 200-DMA |
| 2–5 stocks side by side: price, valuation, ROE, margin, D/E, CAGR, health score, technical score |
Technical
Tool | What it does |
| Any of 57 indicators with recent values |
| Every indicator scored into signals + composite Strong Buy → Strong Sell, risk stats (volatility, Sharpe, Sortino, max drawdown, beta, alpha, relative strength), candlestick patterns |
| 5 pivot styles (classic, Camarilla, Fibonacci, Woodie, DeMark), Fibonacci retracements, swing highs/lows, Donchian channels, ATR, 52-week range position |
Indicators covered (57) — trend: SMA 20/50/200, EMA 9/21/50/200, MACD (+ signal, histogram), ADX/+DI/−DI, Supertrend, Parabolic SAR, Ichimoku (Tenkan/Kijun/Senkou A/B), Aroon, Vortex, linear slope · momentum: RSI 7/14, Stochastic %K/%D, StochRSI, CCI, Williams %R, MFI, ROC, CMO, TSI, Ultimate Oscillator, Awesome Oscillator · volatility: ATR, true range, Bollinger (+%B, bandwidth), Keltner, Donchian, historical volatility, z-score · volume: OBV, VWAP, Chaikin Money Flow, Accumulation/Distribution, Price-Volume Trend, Force Index, volume ratio.
Candlestick patterns (18) — detected by trademcp_get_technical_analysis, each reported with a
bullish/bearish bias: Dragonfly Doji, Gravestone Doji, Doji, Hammer, Shooting Star, Inverted
Hammer, Bullish Engulfing, Bearish Engulfing, Harami, Piercing Line, Dark Cloud Cover, Three White
Soldiers, Three Black Crows, Morning Star, Evening Star, Marubozu, Tweezer Top, Tweezer Bottom.
Fundamentals
Tool | What it does |
| Valuation, profitability, leverage, liquidity, growth, DuPont, 0–100 health score, India-specific ratios (ROCE, ROE, promoter/FII/DII holding, debtor/inventory/payable days, cash conversion cycle) |
| Focused valuation sheet + plain-English cheap/expensive read + optional peer comparison |
| Income statement, balance sheet and cash flow, annual or quarterly |
Ratios computed (54 across 6 groups): valuation — market cap, enterprise value, P/E, PEG, P/B, P/S, EV/EBITDA, EV/Sales, dividend yield, EPS, book value/share, DPS · profitability — gross/operating/EBITDA/net margin, ROE, ROA, ROCE, ROIC, asset turnover, equity multiplier, effective tax rate · leverage — debt/equity, debt/assets, cash, net debt, net debt/EBITDA, interest coverage, debt/capital · liquidity — current ratio, quick ratio, cash ratio, working capital, working capital/share, operating cash flow, free cash flow, FCF margin, CFO/net income, capex, CFPS, FCFPS · growth — revenue/net income/EPS/CFO YoY, revenue and net income 3-year and 5-year CAGR · DuPont — net margin × asset turnover × equity multiplier, reconciled ROE.
Screening & portfolio
Tool | What it does |
| Scan NIFTY 50/100/500 or the NSE universe (first 600 symbols in NSE listing order) on 10 fundamental filters + 4 technical filters, sorted and ranked ( |
| Values positions, P&L, weights, sector concentration, per-holding signals, portfolio beta/vol/Sharpe/drawdown vs benchmark, and risk flags |
Example questions
"Is Reliance a buy right now? Show me the technicals and the fundamentals."
"Screen the NIFTY 50 for ROE above 15% and debt/equity under 0.5, sorted by market cap."
"What are the support and resistance levels for SBI?"
"Compare Infosys and TCS on valuation, growth and momentum."
"How is my portfolio of 10 Reliance, 5 TCS and 20 Infosys positioned?"
"What is today's market breadth in the NIFTY 50?"
Configuration
Every setting has a sensible default; override with environment variables.
Variable | Default | Purpose |
|
| HTTP timeout in seconds |
|
| Disk cache location |
|
| Quote cache seconds (5 min) |
|
| Price history cache seconds (15 min) |
|
| Fundamentals cache seconds (6 h) |
|
| NSE listing cache seconds (12 h) |
|
| Screener.in profile cache seconds (24 h) |
|
| Parallel upstream requests |
|
| Set to |
| browser UA | Outbound User-Agent |
Caching keeps repeat screener and quote calls off the free endpoints. Delete the cache directory to force a refresh.
Verify it works
Repository only — scripts/ and tests/ are not in the npm package.
pip install -e ".[dev]" # the dev extra is what installs pytest
python scripts/verify_all_tools.py # calls all 14 tools against live data
python -m pytest tests -q # 109 offline unit testsKnown limits
Prices are delayed — Yahoo serves NSE quotes with a delay, not tick data. This is a research tool, not an order-routing system.
No intraday fundamental data — statements update quarterly; the screener therefore reflects the last reported period.
Banks and financials have no current ratio (they have no current-asset split), so that metric is blank for them by design, not by failure.
ROCE definitions differ. TradeMCP computes ROCE as EBIT ÷ invested capital; Screener.in uses its own capital base, so the two figures differ slightly. Both are shown separately.
Screener.in is scraper-based. If its markup changes, that source degrades to "fewer fields" rather than breaking the tool. Everything else keeps working.
Rate limits. The free endpoints throttle. Requests are retried with backoff and cached, but a NIFTY 500 screen over cold cache takes roughly 30–60 seconds.
Project layout
src/trademcp/
app.py MCPServer instance
__main__.py entry point (python -m trademcp)
config.py env-driven settings
http.py shared client: headers, retries, actionable errors
cache.py TTL disk cache
symbols.py symbol/name/ISIN/index resolution
formatting.py markdown + JSON rendering
providers/ yahoo.py, nse.py, screener.py
analytics/ indicators.py, fundamentals.py, signals.py
tools/ market.py, technical.py, fundamentals.py, screener.py
showcase/
site/ the static demo page
screenshots/ the images above
SPEC.md DEMO.md PROMPT.mdLicense
MIT — see LICENSE. Provided free of charge, with no warranty; it is a research tool, not investment advice.
Available Tools
14 toolstrademcp_analyze_portfolioARead-onlyIdempotent
Analyse an Indian equity portfolio.
Values every holding at the latest price, computes profit and loss, weight and sector concentration, adds each stock's technical signal, then measures the portfolio against the benchmark (beta, annualised volatility, Sharpe, max drawdown) and flags concentration or signal risk.
Args: holdings: list of positions with symbol, quantity and optional cost price benchmark: benchmark index for risk metrics response_format: 'markdown' or 'json'
Returns: Markdown or JSON with 'holdings', 'allocation', 'risk', 'performance' and 'flags'.
| Name | Required | Description | Default |
|---|---|---|---|
| holdings | Yes | Positions to analyse, e.g. [{'symbol':'RELIANCE','quantity':10,'cost_price':1200}] | |
| benchmark | No | Benchmark index: 'NIFTY 50' or 'SENSEX' | NIFTY 50 |
| response_format | No | 'markdown' or 'json' | markdown |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, openWorldHint=true, idempotentHint=true, and destructiveHint=false, covering the safety profile. The description adds useful context about latest-price valuation, benchmark comparison, and risk flagging, but does not discuss data freshness, external service dependencies, or rate limits beyond what annotations imply.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with purpose and structured into purpose, Args, and Returns sections. It is efficient overall, though the Args and Returns sections partially repeat information already available in the schema and output schema.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a complex portfolio-analysis tool, the description covers the input concepts and the major output areas (holdings, allocation, risk, performance, flags). With an output schema present and annotations covering safety, the remaining gap is minor: it does not mention data limitations or error behavior.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents holdings, benchmark, response_format, and nested Holding fields. The description's Args section largely mirrors that information and adds no new syntax or constraints beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: it analyses an Indian equity portfolio, then enumerates valuation, P&L, concentration, technical signals, benchmark risk metrics, and risk flags. This clearly distinguishes it from sibling tools that fetch single-stock or market-wide data.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The opening sentence and workflow give clear context for when to use the tool: portfolio-level analysis. It does not name explicit alternatives or exclusions, but the scope is sufficiently clear that an agent can select it for portfolio analysis versus single-stock tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
trademcp_compare_stocksARead-onlyIdempotent
Compare two to five Indian stocks across price, valuation, quality and momentum.
Fetches the latest quote, headline fundamental ratios and the technical signal score for each symbol, then lines them up so the differences are obvious.
Args: symbols: two to five symbols or company names response_format: 'markdown' or 'json'
Returns: Markdown table or JSON list with one row per symbol.
| Name | Required | Description | Default |
|---|---|---|---|
| symbols | Yes | Two to five NSE symbols or company names to compare side by side | |
| response_format | No | 'markdown' or 'json' | markdown |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, openWorld and non-destructive, so the safety profile is covered. The description adds genuine value by disclosing the composite data sources (latest quote, headline fundamental ratios, technical signal score) that get assembled into each row. It omits error handling for invalid symbols or partial failures, which keeps it from a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core purpose in the first line, followed by a concise explanation of what is assembled. The Args/Returns block duplicates the schema slightly, but the overall length is proportionate and no sentence is wasted.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists and the description correctly states the return shape (markdown table or JSON list, one row per symbol), so return values need no further detail. Given rich annotations and full param coverage, the only gap is behavior on invalid or missing symbols.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and the Args block essentially restates the schema (including the NSE/company-name allowance and the markdown/json enum). Baseline 3 applies since the schema already carries the meaning.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ("Compare") and resource ("two to five Indian stocks") plus the four dimensions covered: price, valuation, quality, momentum. This clearly separates it from single-symbol tools like get_quote or get_fundamentals, though it never names those siblings explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The "two to five" cardinality constraint implicitly tells the agent not to use this for a single symbol, and the dimension list hints at the comparison use case. However no alternatives are named and there is no explicit when/when-not guidance versus screen_stocks or get_valuation.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
trademcp_get_financial_statementsARead-onlyIdempotent
Get income statement, balance sheet and cash flow line items for a stock.
Shows revenue, gross profit, operating income, EBITDA, net income and EPS from the income statement; total assets, debt, equity and working capital from the balance sheet; and operating cash flow, free cash flow and capex from the cash flow statement, across the requested number of periods.
Args: symbol: NSE symbol or company name period: 'annual' or 'quarterly' years: number of periods to include response_format: 'markdown' or 'json'
Returns: Markdown or JSON with 'income_statement', 'balance_sheet' and 'cash_flow'.
| Name | Required | Description | Default |
|---|---|---|---|
| years | No | How many periods to include (1-10) | |
| period | No | 'annual' or 'quarterly' | annual |
| symbol | Yes | NSE symbol or company name, e.g. 'SBIN' | |
| response_format | No | 'markdown' or 'json' | markdown |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint and non-destructive, so the safety profile is covered. The description adds genuine context beyond that: exactly which line items come back from each of the three statements and that results span the requested number of periods. It omits data source, currency, and latency, which keeps it from a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded purpose sentence, then a compact enumeration of returned fields, then Args and Returns blocks. Every sentence carries information and the structure mirrors how an agent searches for a tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only data-fetch tool with annotations covering safety and an output schema present, the description is nearly sufficient. Minor gaps remain around market scope (NSE-only, currency) and whether periods align to fiscal year ends.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the schema already documents all four parameters including the 1-10 range for years and the enum for response_format. The Args block largely restates those descriptions, adding only the NSE-market hint and the 'number of periods' framing; baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Specific verb + three named resources (income statement, balance sheet, cash flow) with an explicit enumeration of the line items returned, which distinguishes it from sibling tools like get_valuation and get_fundamentals. It stops short of explicitly naming those siblings as alternatives, so it is clear but not fully differentiated.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied by the field enumeration and the Args block (NSE symbol, annual vs quarterly), but there is no explicit 'use this when...' or 'use get_valuation instead for ratios' guidance. The agent must infer the boundary from the listed fields.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
trademcp_get_fundamentalsARead-onlyIdempotent
Get a full fundamental picture of an Indian stock.
Returns valuation (P/E, P/B, P/S, EV/EBITDA, market cap, dividend yield), profitability (gross/operating/net margin, ROE, ROA, ROCE, ROIC, asset turnover), leverage (debt/equity, net debt/EBITDA, interest coverage), liquidity (current ratio, quick ratio, free cash flow), growth (YoY and 3/5-year CAGR), a DuPont breakdown and a 0-100 health score.
Args: symbol: NSE symbol or company name include_india_metrics: pull India-specific ratios from Screener.in response_format: 'markdown' or 'json'
Returns: Markdown or JSON with 'valuation', 'profitability', 'leverage', 'liquidity', 'growth', 'dupont', 'india_specific' and 'health_score'.
| Name | Required | Description | Default |
|---|---|---|---|
| symbol | Yes | NSE symbol or company name, e.g. 'HDFCBANK' | |
| response_format | No | 'markdown' or 'json' | markdown |
| include_india_metrics | No | Include India-specific ratios from Screener.in (ROCE, ROCE, promoter holding, working-capital days) |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, openWorldHint and non-destructiveness, so the safety profile is covered. The description adds one genuinely useful behavioral fact — that India-specific ratios come from the external Screener.in source — but says nothing about latency, coverage gaps for non-Indian tickers, or failure modes when metrics are unavailable.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core purpose, then cleanly sectioned into Args and Returns. The metric enumeration is long but earns its place by letting an agent know whether a needed ratio is present; the Returns block partially duplicates the output schema, which is the only real waste.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present and full schema coverage, the definition supplies everything needed to invoke correctly, plus useful scope information about what the payload contains. Missing only guidance on symbol resolution and on behavior for non-Indian or invalid symbols.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all three parameters including the Screener.in flag and the enum-constrained response_format. The Args block restates that information without adding format, normalization, or fallback semantics, so baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Get a full fundamental picture of an Indian stock') and enumerates the metric families returned, which makes it distinguishable from narrower siblings like get_valuation and get_financial_statements by scope. However, it never names those siblings or states that this is the aggregate view, so the differentiation is inferred rather than explicit.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is only implied: an agent can infer this is the broad fundamentals call versus the narrower valuation/statements tools, but there is no explicit 'use this when…/use X instead when…' guidance and no prerequisites (e.g., symbol lookup via search_symbol) are mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
trademcp_get_index_snapshotARead-onlyIdempotent
Get live quotes for major Indian indices.
Covers NIFTY 50, SENSEX, the NIFTY sector indices (Bank, IT, Auto, FMCG, Pharma, Realty, Metal, Energy, PSU Bank, Private Bank, Financial Services, Media) and INDIA VIX, so the caller can see where the market stands.
Args: indices: optional list of index names to fetch response_format: 'markdown' or 'json'
Returns: Markdown table or JSON list of index quotes with price, change and percent change.
| Name | Required | Description | Default |
|---|---|---|---|
| indices | No | Index names to fetch, e.g. ['NIFTY 50','SENSEX','NIFTY BANK']. Omit for the default set. | |
| response_format | No | 'markdown' or 'json' | markdown |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, non-destructive and openWorld, so the safety profile is covered. The description adds the response shapes (markdown table or JSON list) and the existence of a default index set, but says nothing about latency, rate limits, or what happens when a requested index name is unknown.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core action, then the coverage list, then usage, then Args/Returns. No filler sentences; the index enumeration is long but it is the substantive scoping information an agent needs.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
A zero-required-parameter read tool with 100% schema coverage, full annotations, and an output schema – nearly everything necessary is present. The Returns section duplicates what the output schema already encodes, which is mildly redundant rather than harmful.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and both parameters are documented in the schema, including the example of index name formatting and the default-set behavior. The description's Args block largely restates this ('optional list of index names', "'markdown' or 'json'") without adding format or edge-case details, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Specific verb + resource ('Get live quotes for major Indian indices') with an explicit enumeration of the covered universe (NIFTY 50, SENSEX, sector indices, INDIA VIX). That universe listing makes it trivially distinguishable from siblings like trademcp_get_quote (single symbol) or trademcp_get_market_breadth.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is only implied by 'so the caller can see where the market stands' – a broad market-overview framing. It never states when to prefer this over trademcp_get_quote or trademcp_get_market_breadth, nor any prerequisites. The one concrete usage instruction is parameter-level ('Omit for the default set').
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
trademcp_get_market_breadthARead-onlyIdempotent
Measure market breadth for an Indian index.
Counts advancers, decliners and unchanged stocks among the index constituents, reports the average and median move, and lists the top gainers and losers. Optionally adds the percentage of constituents trading above their 200-day moving average, the classic trend-breadth gauge.
Args: index: index to analyse include_trend: compute the 200-day moving average breadth too response_format: 'markdown' or 'json'
Returns: Markdown or JSON breadth summary with gainers, losers and breadth percentages.
| Name | Required | Description | Default |
|---|---|---|---|
| index | No | Index whose constituents are analysed: 'NIFTY 50' or 'NIFTY 100' | NIFTY 50 |
| include_trend | No | Also compute the share of constituents above their 200-day moving average (slower) | |
| response_format | No | 'markdown' or 'json' | markdown |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, destructive=false and openWorld. The description adds genuine behavioral detail beyond that: the trend calculation is 'slower' (a latency signal) and precisely what statistics are produced. It doesn't discuss rate limits, error behavior, or index validity handling.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The opening sentence front-loads the purpose and the body enumerates outputs efficiently. The Args/Returns blocks are partly redundant with the fully described schema and output schema, slightly diluting conciseness.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema, complete annotation coverage, and 100% parameter documentation, the description is sufficient to call the tool correctly. The only missing element is guidance on picking this tool over sibling analysis tools.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so all three parameters are already documented, including the 'slower' caveat on include_trend and the JSON/markdown enum. The Args section largely restates the schema, adding no new syntax, defaults, or constraints, so baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (measure) and resource (market breadth for an Indian index) and enumerates the concrete outputs: advancers/decliners, average and median move, gainers/losers. It does not contrast itself with adjacent siblings like get_index_snapshot or get_technical_analysis, so it falls short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied by the description of what it computes, and 'Optionally adds ... the classic trend-breadth gauge' gives some context for include_trend. There is no explicit when-to-use, when-not-to-use, or named alternative among the 13 siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
trademcp_get_price_historyARead-onlyIdempotent
Get historical OHLCV candles for an Indian stock.
Returns the most recent candles with date, open, high, low, close and volume, newest first, along with the period's start/end prices and total return so the caller can chart or analyse the series.
Args: symbol: NSE symbol or company name range: lookback window interval: candle size limit: maximum candles to return exchange: 'NSE' or 'BSE' response_format: 'markdown' or 'json'
Returns: Markdown table of candles, or JSON with 'candles' and 'period_summary'.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum number of candles to return (1-500) | |
| range | No | Lookback window: 1mo, 3mo, 6mo, 1y, 2y, 5y, 10y, ytd, max | 6mo |
| symbol | Yes | NSE symbol or company name, e.g. 'INFY' | |
| exchange | No | 'NSE' or 'BSE' | NSE |
| interval | No | Bar size: 1d, 1wk, 1mo, 1h, 30m, 15m, 5m | 1d |
| response_format | No | 'markdown' or 'json' | markdown |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile (readOnly, idempotent, non-destructive, open-world), but the description adds real value beyond them: newest-first ordering, the period start/end prices and total return, and the two response formats with their return shapes. It does not mention data recency or rate/source limits, which matters given openWorldHint=true.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Purpose and return shape are front-loaded, which is good, but the six-line Args block duplicates parameter documentation the schema already provides in full, so several sentences do not earn their place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present and full parameter documentation, the definition covers what an agent needs to call it correctly. Minor gaps remain around data freshness and how range interacts with limit, neither of which is stated.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the bar is baseline 3, and the Args block largely restates the schema ('range: lookback window', 'interval: candle size') without adding meaning such as allowed enum values or interaction rules between range and limit.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Get historical OHLCV candles for an Indian stock') and the word 'historical' cleanly separates it from the point-in-time siblings such as trademcp_get_quote and from indicator tools like trademcp_get_technical_indicators. An agent can route on this sentence alone.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is only implied via 'so the caller can chart or analyse the series'; there is no explicit when-to-use, when-not-to-use, or named alternative such as 'use get_quote for the current price'. An agent must infer the boundary itself.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
trademcp_get_quoteBRead-onlyIdempotent
Get the latest price quote and key statistics for an Indian stock.
Returns the last traded price, day change, day's range, volume, 52-week range, market capitalisation and valuation multiples (P/E, P/B, EPS, dividend yield, beta), plus 1 week / 1 month / 3 month / 1 year returns.
Args: symbol: NSE symbol or company name exchange: 'NSE' or 'BSE' response_format: 'markdown' or 'json'
Returns: Markdown or JSON quote payload. 'Error: ...' if the symbol cannot be resolved.
| Name | Required | Description | Default |
|---|---|---|---|
| symbol | Yes | NSE symbol or company name, e.g. 'RELIANCE' or 'tata motors' | |
| exchange | No | Preferred listing: 'NSE' or 'BSE' | NSE |
| response_format | No | 'markdown' or 'json' | markdown |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, openWorldHint and destructiveHint=false, so the safety profile is covered. The description contributes one genuinely useful behavioral detail — an 'Error: ...' string when the symbol cannot be resolved — but says nothing about data latency/real-time-ness, rate limits, or upstream data source, which matter for an openWorld quote tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Well front-loaded: purpose in sentence one, payload in sentence two, then Args/Returns blocks. There is some redundancy where the Returns section repeats the enumerated fields already listed in the opening, but overall it is tight and skimmable.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so re-describing the return payload adds little, while the real gaps — sibling differentiation, whether the quote is real-time or delayed, and exchange-selection semantics — go unaddressed. Adequate to call the tool correctly, but not complete for a 13-sibling financial data suite.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and the schema already contains examples ('RELIANCE', 'tata motors') and defaults for exchange and response_format. The Args block largely restates the schema verbatim without adding syntax, normalization rules, or fallback behavior for exchange, so baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The first sentence names a specific verb and resource ('Get the latest price quote and key statistics for an Indian stock') and the body enumerates exactly what is returned, so an agent knows this is a current-snapshot tool. It does not, however, distinguish itself from siblings like trademcp_get_valuation or trademcp_get_price_history even though the listed return fields (P/E, P/B, returns) overlap with them.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no explicit statement of when to use this versus the 13 sibling tools — no mention that historical data belongs to get_price_history or that deep valuation belongs to get_valuation. The snapshot nature is only implied by the word 'latest', leaving the agent to infer routing from the return-field list.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
trademcp_get_support_resistanceBRead-onlyIdempotent
Compute support and resistance levels for an Indian stock.
Returns pivot points in classic, Camarilla, Fibonacci, Woodie and DeMark styles, Fibonacci retracement levels over the recent range, recent swing highs and lows, 20-day Donchian channels, ATR and the position of the price inside its 52-week range.
Args: symbol: NSE symbol or company name range: lookback window response_format: 'markdown' or 'json'
Returns: Markdown or JSON with 'pivots', 'fibonacci_retracement', 'range', 'swing_highs' and 'swing_lows'.
| Name | Required | Description | Default |
|---|---|---|---|
| range | No | Lookback window: 6mo, 1y, 2y, 5y | 1y |
| symbol | Yes | NSE symbol or company name, e.g. 'TCS' | |
| response_format | No | 'markdown' or 'json' | markdown |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already declare readOnlyHint=true, openWorldHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is covered. The description adds that this is a computation over Indian stock data and lists the analytical outputs, but it does not disclose data freshness, rate limits, authentication needs, or error behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the core purpose and uses a clear Args/Returns structure. It has minor redundancy because the output components are enumerated in prose and then partially repeated in the Returns section, despite an output schema also being present.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description gives enough context to understand that this is a read-only technical computation for Indian NSE stocks and what analytical outputs to expect. It is complete for invocation, though it could better explain when to choose this tool over related technical-analysis siblings.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents symbol, range, and response_format. The description repeats those parameters at a high level but adds no meaningful syntax or format detail beyond the schema, making the baseline 3 appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb and resource: "Compute support and resistance levels for an Indian stock." It clearly enumerates the computed outputs, but it does not explicitly distinguish this tool from siblings such as trademcp_get_technical_indicators or trademcp_get_technical_analysis.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives no explicit when-to-use guidance, prerequisites, or alternatives. Usage is only implied by the stated purpose, and none of the sibling technical-analysis tools are referenced as alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
trademcp_get_technical_analysisARead-onlyIdempotent
Run a full technical analysis and produce a directional read on a stock.
Scores every indicator, explains each signal in plain language, reports the composite score (Strong Buy / Buy / Neutral / Sell / Strong Sell), and adds risk statistics (annualised volatility, Sharpe, Sortino, max drawdown, beta, alpha, 30-day relative strength) plus recent candlestick patterns.
Args: symbol: NSE symbol or company name range: lookback window for the analysis benchmark: benchmark index for beta and relative strength response_format: 'markdown' or 'json'
Returns: Markdown or JSON with 'summary', 'signals', 'indicators', 'statistics' and 'candles'.
| Name | Required | Description | Default |
|---|---|---|---|
| range | No | Lookback window: 6mo, 1y, 2y, 5y | 1y |
| symbol | Yes | NSE symbol or company name, e.g. 'INFY' | |
| benchmark | No | Benchmark index for beta/relative strength: 'NIFTY 50' or 'SENSEX' | NIFTY 50 |
| response_format | No | 'markdown' or 'json' | markdown |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover safety (readOnly, idempotent, non-destructive), so the description's job is to add context, and it does: it names the exact composite scale (Strong Buy through Strong Sell) and the specific risk metrics computed (volatility, Sharpe, Sortino, max drawdown, beta, alpha, 30-day relative strength). It does not disclose data source, latency, or whether results are cached, which keeps it short of a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded: the first sentence says what the tool produces, then the Returns/Args blocks. Every sentence carries information, though the Args section is mildly redundant with an already fully-documented schema.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, yet the description still summarizes the return keys ('summary', 'signals', 'indicators', 'statistics', 'candles'), and it covers all four inputs with defaults. For a read-only analysis tool, an agent has everything needed to call it correctly and interpret the shape of the result.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and all four parameters are documented in the schema itself, so the baseline of 3 applies. The Args block largely restates the schema ('symbol: NSE symbol or company name', 'response_format: markdown or json') without adding format, constraints, or behavior — for example, what happens if the symbol is ambiguous or unknown.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Run a full technical analysis') and enumerates the concrete outputs: indicator scores, composite rating, risk statistics, candlestick patterns. It is clearly a composite-analysis tool, distinguishing it in substance from trademcp_get_technical_indicators, but it never names that sibling or explicitly contrasts the two.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied by the output inventory — an agent can infer this is the 'give me the whole technical picture' call. However, there is no explicit when-to-use, when-not-to-use, or routing statement pointing to get_technical_indicators, get_support_resistance, or get_price_history.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
trademcp_get_technical_indicatorsARead-onlyIdempotent
Compute technical indicators for an Indian stock.
Covers 60+ indicators across trend (moving averages, MACD, ADX, Supertrend, Ichimoku, Parabolic SAR, Aroon, Vortex), momentum (RSI, Stochastic, CCI, Williams %R, MFI, ROC, CMO, TSI, Ultimate Oscillator), volatility (ATR, Bollinger, Keltner, Donchian, historical volatility), volume (OBV, VWAP, Chaikin Money Flow, Accumulation/Distribution, Force Index) and statistics.
Args: symbol: NSE symbol or company name indicators: names to compute; omit for the full set range: lookback window interval: candle size limit: recent points kept per indicator response_format: 'markdown' or 'json'
Returns: Markdown table (indicator, latest value, recent values) or JSON with 'indicators' and 'series'.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | How many recent data points to keep per indicator (1-100) | |
| range | No | Lookback window: 3mo, 6mo, 1y, 2y, 5y | 1y |
| symbol | Yes | NSE symbol or company name, e.g. 'RELIANCE' | |
| interval | No | Bar size: 1d, 1wk, 1h, 30m | 1d |
| indicators | No | Indicator names to compute, e.g. ['rsi_14','macd','atr_14']. Omit for all 60+. | |
| response_format | No | 'markdown' or 'json' | markdown |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false and openWorldHint=true, so the safety profile is covered. The description adds the two response shapes (markdown table of latest + recent values, or JSON with 'indicators' and 'series'), which is useful context, but says nothing about data source freshness, rate limits, or the cost of computing all 60+ indicators.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The opening two paragraphs are well front-loaded and earn their place. However, the Args and Returns blocks largely duplicate the 100%-covered input schema and the existing output schema, so a meaningful share of the text is redundant rather than additive.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With 6 parameters, full schema coverage, an output schema and rich annotations, the definition supplies what an agent needs to invoke the tool correctly. The remaining gap is routability against trademcp_get_technical_analysis and trademcp_get_support_resistance, which the description never addresses.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3; the description earns the bump because the enumerated indicator taxonomy (trend/momentum/volatility/volume/statistics with named examples) helps an agent actually construct the otherwise free-form 'indicators' array beyond the schema's two examples. The Args section otherwise restates the schema verbatim for symbol, range, interval, limit and response_format.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Compute technical indicators for an Indian stock') and enumerates the indicator families covered, which makes the tool's scope concrete. It stops short of distinguishing itself from the closely-named sibling trademcp_get_technical_analysis or get_support_resistance, so an agent still has to guess which of the three to reach for.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is only implied: 'omit for the full set' and the category list tell you how to use parameters, but there is no explicit when-to-use-this-vs-alternatives guidance despite three overlapping siblings. No preconditions, no exclusions, no routing statement.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
trademcp_get_valuationARead-onlyIdempotent
Get a focused valuation sheet for an Indian stock.
Returns market cap, enterprise value, P/E, P/B, P/S, EV/EBITDA, PEG, dividend yield, EPS and book value per share, alongside a plain-English reading of whether the stock looks cheap or expensive versus its own growth and quality metrics.
Args: symbol: NSE symbol or company name peers: include a same-industry peer comparison response_format: 'markdown' or 'json'
Returns: Markdown or JSON with 'valuation', 'growth_context', 'verdict' and optional 'peers'.
| Name | Required | Description | Default |
|---|---|---|---|
| peers | No | Also fetch a small peer set from the same NSE industry for comparison | |
| symbol | Yes | NSE symbol or company name, e.g. 'BAJFINANCE' | |
| response_format | No | 'markdown' or 'json' | markdown |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, openWorldHint and destructiveHint=false, so the safety profile is covered. The description adds genuine value beyond that: it discloses the response sections ('valuation', 'growth_context', 'verdict', optional 'peers') and that a plain-English cheap/expensive verdict is computed, which the agent could not know from annotations alone.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The opening sentence is front-loaded and delivers the purpose immediately, and the metric list is dense and useful. The Args/Returns blocks duplicate the input schema and output schema, which is mild waste but standard for this format.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present, the description still helpfully names the return sections, and it scopes the tool to Indian/NSE stocks, which is important context. Minor gaps: no mention of data freshness, caching, or whether non-NSE symbols are rejected.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, and the Args block largely restates what the schema already says ('symbol: NSE symbol or company name', 'response_format: markdown or json'). The 'peers' note adds a small amount of meaning (same-industry comparison) but nothing beyond the schema's own description.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Get a focused valuation sheet for an Indian stock') and enumerates the exact metrics returned, so an agent knows precisely what it gets. It does not explicitly differentiate itself from the closely related trademcp_get_fundamentals sibling, leaving that overlap for the agent to infer.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The word 'focused' and the enumerated valuation metrics imply this is the narrow valuation-only view, but there is no explicit 'use this instead of X when Y' guidance. With siblings like get_fundamentals and compare_stocks in the same family, an agent must guess which to pick.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
trademcp_screen_stocksARead-onlyIdempotent
Screen Indian stocks by fundamental and technical criteria.
Scans an index universe (or every NSE-listed stock), pulls the latest fundamentals for each name, applies the fundamental filters, then applies the technical filters to the survivors and returns the best matches.
Args: universe: 'NIFTY 50', 'NIFTY 100', 'NIFTY 500' or 'NSE' min_pe: maximum P/E max_pe: minimum P/E min_roe: minimum return on equity (%) min_roce: minimum return on capital employed (%) min_net_margin: minimum net margin (%) max_debt_to_equity: maximum debt/equity min_market_cap: minimum market cap in rupees min_dividend_yield: minimum dividend yield (%) min_current_ratio: minimum current ratio min_revenue_cagr: minimum 3-year revenue CAGR (%) rsi_below: maximum RSI (oversold screen) rsi_above: minimum RSI (overbought screen) above_sma50: require price above the 50-day average above_sma200: require price above the 200-day average limit: maximum rows to return sort_by: field to sort by sort_order: 'desc' (default) or 'asc' response_format: 'markdown' or 'json'
Returns: Markdown table or JSON with 'matches' and the filter set applied.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum stocks to return (1-100) | |
| max_pe | No | Only stocks with P/E at or above this | |
| min_pe | No | Only stocks with P/E at or below this | |
| min_roe | No | Minimum return on equity (%) | |
| sort_by | No | Sort field: 'market_cap', 'pe_ratio', 'price_to_book', 'roe_pct', 'roce_pct', 'revenue_cagr_3y_pct', 'dividend_yield_pct', 'health_score' | market_cap |
| min_roce | No | Minimum return on capital employed (%) | |
| universe | No | Stock universe to scan: 'NIFTY 50', 'NIFTY 100', 'NIFTY 500' or 'NSE' (all listed) | NIFTY 50 |
| rsi_above | No | Only stocks with RSI over this (overbought screen) | |
| rsi_below | No | Only stocks with RSI under this (oversold screen) | |
| sort_order | No | Sort direction: 'desc' or 'asc' | desc |
| above_sma50 | No | Only stocks trading above their 50-day average | |
| above_sma200 | No | Only stocks trading above their 200-day average | |
| min_market_cap | No | Minimum market cap in rupees | |
| min_net_margin | No | Minimum net profit margin (%) | |
| response_format | No | 'markdown' or 'json' | markdown |
| min_revenue_cagr | No | Minimum 3-year revenue CAGR (%) | |
| min_current_ratio | No | Minimum current ratio | |
| max_debt_to_equity | No | Maximum debt to equity ratio | |
| min_dividend_yield | No | Minimum dividend yield (%) |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/idempotent/non-destructive and open-world, so safety is covered. The description adds real behavioral detail beyond that: the two-stage filter order (fundamentals first, technicals on survivors) and that both matches and the applied filter set are returned. It omits expected latency/result-size implications of scanning the full NSE universe.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The opening paragraph is well front-loaded and earns its place. However, the 19-line Args block restates parameters that are already 100% documented in the schema, adding bulk without new meaning.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Output schema exists and annotations cover safety, so the description need only explain the process — which it does. The main residual gap is the ambiguous P/E parameter wording and the absence of any note on scan cost/results for large universes.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline would be 3, but the description actively muddles two parameters: it says 'min_pe: maximum P/E' and 'max_pe: minimum P/E', which conflicts with the schema's own (already inverted-looking) descriptions. An agent reading both would have to guess the direction of the P/E filter, which is a real error risk.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Screen Indian stocks by fundamental and technical criteria') and the pipeline (index/NSE scan → fundamentals → technical filters). Among siblings that fetch single-company data, this is clearly the only multi-name screening tool, so differentiation is immediate.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied by the description's screening framing, but there is no explicit statement of when to reach for this instead of get_fundamentals or compare_stocks, and no guidance on universe cost trade-offs (e.g., 'NSE' scans everything).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
trademcp_search_symbolARead-onlyIdempotent
Search NSE-listed companies by ticker symbol or company name.
Use this when the user gives a company name rather than an NSE code, or when a symbol might be ambiguous. Returns the NSE code, company name, ISIN and listing details for each match, ranked with exact symbol matches first.
Args: query: ticker or company name to search for limit: maximum number of matches to return response_format: 'markdown' or 'json'
Returns: Markdown table or JSON list of matches with 'symbol', 'name', 'isin' fields.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum results to return (1-50) | |
| query | Yes | Symbol code or company name to search, e.g. 'RELIANCE', 'tata', 'bank of baroda' | |
| response_format | No | 'markdown' for readable output or 'json' for structured data | markdown |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, openWorld and non-destructive, so safety is covered. The description adds genuine behavior: matches are ranked with exact symbol matches first, which tells the agent how to interpret ordering and that fuzzy matches are possible.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The opening two sentences are front-loaded with purpose and the selection condition, which is the highest-value content. The trailing Args and Returns blocks duplicate the input schema and output schema respectively, adding length without new information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An agent knows what the tool does, when to reach for it, how results are ranked, and what fields come back. With an output schema present, the Returns section is redundant rather than necessary, and no note on empty-result behavior is included, so it falls just short of fully complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and every schema parameter already carries a description with examples and the 1-50 range. The Args block essentially restates the schema (query, limit, response_format) without adding syntax, matching semantics, or format details beyond it, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (search) and resource (NSE-listed companies) with the two acceptable key types (ticker or company name). The scope makes it clearly a symbol-resolution tool, distinct from the sibling data-fetching tools like trademcp_get_quote or trademcp_get_fundamentals.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly names the trigger condition: use when the user supplies a company name instead of an NSE code, or when the symbol may be ambiguous. It implies the inverse (skip if you already have the code) rather than stating it, and names no alternative tool, keeping it short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
14 tool updates
v0.1.0- First observed
trademcp_analyze_portfolio - First observed
trademcp_compare_stocks - First observed
trademcp_get_financial_statements - First observed
trademcp_get_fundamentals - First observed
trademcp_get_index_snapshot - First observed
trademcp_get_market_breadth - First observed
trademcp_get_price_history - First observed
trademcp_get_quote - First observed
trademcp_get_support_resistance - First observed
trademcp_get_technical_analysis - First observed
trademcp_get_technical_indicators - First observed
trademcp_get_valuation - First observed
trademcp_screen_stocks - First observed
trademcp_search_symbol
TDQS
Scored across 14 tools
Each tool has a reasonably distinct focus, but there is meaningful overlap: get_fundamentals already includes valuation multiples that get_valuation re-exposes, and get_technical_indicators, get_technical_analysis and get_support_resistance all derive from the same indicator/candle pipeline. Descriptions do enough to route an agent (raw indicators vs. scored signal vs. price levels), so confusion is limited but not eliminated.
Every tool follows the same trademcp_verb_noun snake_case pattern (get_quote, get_price_history, screen_stocks, analyze_portfolio, compare_stocks). Verb usage (get/analyze/compare/screen/search) is coherent and predictable across the set.
14 tools sits comfortably in the well-scoped range for a full equity-research server covering quotes, fundamentals, technicals, screening and portfolio analysis. No single tool looks like filler, and the surface is not so large that discovery becomes a burden.
The lifecycle from symbol lookup through quotes, history, fundamentals, valuation, screening, comparison and portfolio risk is well covered, with no obvious dead ends for analysis workflows. Gaps remain around news/events, corporate actions and dividends, and peer comparison is only available as an option inside get_valuation rather than as a first-class tool.
Maintenance
Related MCP Connectors
Hosted MCP server for Indian NSE/BSE stock research: 59 tools for quotes, financials and ratios, peers, shareholding and pledge, filings with extracted facts, screens, F&O and FII/DII context. Source and freshness on every answer; no buy/sell calls.
Live crypto + IDX stock market intelligence for AI agents — 19 tools, no API key.
48 tools for ~8,000 NSE & BSE stocks: quotes, screener, financials, filings, FII/DII, options
SEC filings and financial data for AI agents: 59 tools for statements, valuation and supply chains.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceProvides real-time and historical Indian stock market data from NSE and BSE exchanges with 66 tools covering quotes, options chains, corporate actions, IPOs, and market analytics for LLM-powered financial analysis.126 npm13MIT
- AlicenseAqualityBmaintenanceIndian stock market (NSE & BSE) MCP server with 55 tools: live quotes, financials, technicals, a 326-ratio screener, FII/DII flows, option chains with IV, parsed annual reports and concall transcripts, IPOs and portfolio tracking for ~8,200 stocks.55110 npm143MIT
- AlicenseNot gradedqualityDmaintenanceEnables AI assistants to perform deep Indian stock research with fundamentals, forensic scores, DCF valuation, screening, and news for 6000+ NSE/BSE stocks.17 npm1MIT
- AlicenseAqualityBmaintenanceEnables AI assistants to query live NSE & BSE stock market data, with 55 tools covering quotes, financials, screeners, FII/DII flows, option chains, and company filings.55MIT