CSE MCP Intelligence
Click on "Install 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., "@CSE MCP IntelligenceShow me today's top gainers"
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.
CSE MCP Intelligence
Institutional-grade MCP server for the Colombo Stock Exchange. Features real-time market data, order flow pressure analysis, and AI-powered forensic fundamental screening.
š Quick Start
# Clone repository
git clone https://github.com/hareeshkar/cse-mcp-intelligence.git
cd cse-mcp-intelligence
# Install dependencies
npm install
# Build
npm run build
# Run with Claude
npm startRelated MCP server: CSE MCP Server
š What is MCP?
Model Context Protocol (MCP) enables Claude and other AI models to access external data sources and APIs in real-time. Instead of relying on static training data, Claude can now fetch live market information from the CSE API.
⨠Features
Real-time Market Data - Current stock prices, market status, and daily summaries
Sector Analysis - Track performance across all market sectors with detailed metrics
Stock Intelligence - Company profiles, financial reports, and compliance information
Order Flow Analysis - Market depth, trading pressure indicators, and volume analysis
Historical Data - Candlestick charts and detailed trade history for technical analysis
Smart Caching - 30-second cache to optimize API usage and reduce latency
š§ Installation
Prerequisites
Node.js 18+ (download)
npm 9+ (comes with Node.js)
Claude Desktop (for integration)
Setup Steps
Clone the repository:
git clone https://github.com/hareeshkar/cse-mcp-intelligence.git cd cse-mcp-intelligenceInstall dependencies:
npm installBuild the TypeScript source:
npm run build
āļø Claude Desktop Configuration
āļø Claude Desktop Configuration
macOS/Linux
Edit ~/Library/Application Support/Claude/claude_desktop_config.json:
{
"mcpServers": {
"cse": {
"command": "node",
"args": ["/full/path/to/cse-mcp-intelligence/build/index.js"]
}
}
}Windows
Edit %APPDATA%\Claude\claude_desktop_config.json:
{
"mcpServers": {
"cse": {
"command": "node",
"args": ["C:\\full\\path\\to\\cse-mcp-intelligence\\build\\index.js"]
}
}
}ā ļø Important: Replace the path with your actual project location.
Restart Claude Desktop
After updating the config, completely close and reopen Claude Desktop for the changes to take effect.
š Available Tools
Market Overview
scan_market
Get all stocks trading on the Colombo Stock Exchange with filtering capabilities.
Parameters:
maxPrice(number, optional) - Filter for penny stocks below this price in LKRminVolume(number, optional) - Only show stocks with volume above threshold (filters illiquid stocks)
Returns: Array of stocks with symbol, name, current price, change %, and volume
Use Cases:
Penny stock hunting:
scan_market { maxPrice: 50 }Active stocks only:
scan_market { minVolume: 100000 }
get_sectors
Performance data for all CSE market sectors.
Returns: Sector names with change %, turnover, market capitalization
Use Cases:
Sector rotation analysis
Finding the strongest/weakest sectors
Portfolio diversification checks
get_market_status
Real-time market status - check if trading is active.
Returns: Open/Closed status, current timestamp, trading hours
get_market_summary
Comprehensive daily market overview with macro indicators.
Returns: P/E ratio, P/B ratio, foreign investor flow, total turnover, market mood
Stock Performance
get_top_gainers
Stocks with highest percentage gains today.
Parameters:
limit(number, optional, default: 10) - How many top performers to show
Returns: Top performers with price action and volume data
get_top_losers
Stocks with highest percentage losses today.
Parameters:
limit(number, optional, default: 10) - How many bottom performers to show
Returns: Oversold stocks useful for contrarian or risk assessment
Stock Analysis
get_stock_detail
Complete detailed information about a specific stock.
Parameters:
symbol(required) - Stock symbol (e.g., "SLTL", "ASPI", "LAUGF")
Returns: Company profile, current price, P/E ratio, dividends, 52-week high/low, trading stats
Use Cases:
Fundamental analysis
Company profile research
Valuation metrics
get_stock_trades
Recent trade history for order flow analysis.
Parameters:
symbol(required) - Stock symbollimit(optional, default: 20) - Number of recent trades
Returns: Timestamps, executed prices, volumes, trade direction (buy/sell)
Use Cases:
Order flow forensics
Volume profile analysis
Institutional buying/selling detection
get_order_book
Live market depth with order flow pressure analysis.
Parameters:
symbol(required) - Stock symbol
Returns:
Bid/ask levels with volumes
Pressure index (-1 = extreme bearish, +1 = extreme bullish)
Bid-ask spread percentage
Market depth profile
Use Cases:
Pre-trade liquidity analysis
Support/resistance levels
Institutional accumulation/distribution detection
Technical Analysis
get_candlesticks
OHLC (Open, High, Low, Close) data for technical analysis.
Parameters:
symbol(required) - Stock symbolperiod(optional, default: "1d") - Time period ("1d", "1w", "1m")
Returns: Candlestick data with open, high, low, close prices and volume
Use Cases:
Technical pattern recognition
Trend analysis
Support/resistance identification
Volume profile
š” Real-World Usage Examples
Penny Stock Screening
Query: "Find all penny stocks under Rs. 50 with high trading volume"
Tool: scan_market { maxPrice: 50, minVolume: 500000 }
ā Get list of actively traded penny stocks for swing tradingSector Rotation Strategy
Query: "Which sectors are outperforming today? Show me the leaders."
Tool: get_sectors
ā Identify hot sectors and potential rotation candidatesPre-Trade Liquidity Check
Query: "Can I buy 10,000 shares of SLTL without moving the price too much?"
Tool: get_order_book { symbol: "SLTL" }
ā Check bid-ask spread, depth, and available liquidityOrder Flow Forensics
Query: "Show me the last 50 trades on ASPI - is it institutional buying or selling?"
Tool: get_stock_trades { symbol: "ASPI", limit: 50 }
ā Analyze trade timing and sizes to identify smart money activityTechnical Setup Confirmation
Query: "Show SLTL candlesticks and confirm the resistance breakout"
Tool: get_candlesticks { symbol: "SLTL", period: "1d" }
ā Get OHLC data for pattern recognition and trend analysisMarket Stress Test
Query: "What percentage of stocks are down today? Any panic selling?"
Tool: get_top_losers { limit: 20 }
ā Identify oversold conditions and panic-driven opportunitiesšļø Technical Architecture
Core Components
1. CSE API Client (src/cse-client.ts)
Purpose: Direct wrapper around the Colombo Stock Exchange REST API
Features:
Smart caching (30-second TTL) to reduce API load and improve responsiveness
Symbol mapping (Display Name ā API Symbol translation)
CDN URL fixing for company reports and documents
Error resilience with graceful fallbacks
Automatic retry logic with exponential backoff
Key Methods:
getAllStocks()- Market scangetStockDetail(symbol)- Detailed fundamental datagetOrderBook(symbol)- Real-time market depthgetTradeHistory(symbol, limit)- Order flow analysisgetCandlesticks(symbol, period)- Technical data
2. Tool Definitions & Handlers (src/tools.ts)
Purpose: Define all MCP tools available to Claude with proper schemas
Includes:
Tool name, description, parameter schema
Input validation using JSON Schema
Type definitions for type safety
8+ Tools:
scan_market- Market scanning with filtersget_sectors- Sector performanceget_market_status- Trading statusget_market_summary- Macro indicatorsget_top_gainers/get_top_losers- Performance leaders/laggardsget_stock_detail- Fundamental analysisget_stock_trades- Trade history/order flowget_order_book- Market depthget_candlesticks- Technical analysis
3. MCP Server (src/index.ts)
Purpose: Entry point that bridges CSE API and Claude
Responsibilities:
Listens to Claude's tool requests via stdio
Routes requests to appropriate CSE client methods
Handles request/response serialization
Error handling and user-friendly error messages
Request parameter validation
Data Flow
Claude Desktop
ā
[MCP Server] ā Claude makes tool request (JSON-RPC)
ā
[Tool Router] ā Validates parameters
ā
[CSE Client] ā Fetches data from API
ā
Colombo Stock Exchange API
ā
[Cache Layer] ā 30-second cache for same requests
ā
[Response Formatter] ā Cleans and structures data
ā
Claude ā Gets structured market data for analysisCaching Strategy
The system implements smart caching to optimize performance:
TTL: 30 seconds (market data doesn't change faster)
Cache Key: Tool name + parameters hash
Benefits:
Reduces API calls during multi-tool analysis
Faster Claude response times
Respects CSE rate limits
Can handle 1,000+ requests/minute internally
Error Handling & Fallbacks
API Timeouts ā Cached data (if available) or graceful error
Invalid Symbol ā Fuzzy matching suggestions
Market Closed ā Return last known data with status
Network Errors ā Retry up to 3 times with exponential backoff
Rate Limiting ā Queue and delay requests intelligently
CSE API Integration Points
The server connects to these CSE API endpoints:
/v1/stocks- All stocks with live prices/v1/stocks/{id}- Stock detail & fundamentals/v1/stocks/{id}/orderbook- Market depth/v1/stocks/{id}/trades- Trade history/v1/sectors- Sector performance/v1/market- Overall market status
š Scripts
npm run build # Compile TypeScript to JavaScript
npm start # Run the MCP server
npm run dev # Run in development mode with hot reloadš Troubleshooting
Claude doesn't recognize the server
Verify the path in
claude_desktop_config.jsonis correct and absoluteMake sure you've run
npm run buildRestart Claude Desktop completely (not just minimize)
API Connection Issues
Check that you have internet connectivity
Verify the CSE API is accessible:
curl https://api.cse.lk/api/v1/marketCheck rate limiting if getting 429 errors
Build Errors
Delete
build/andnode_modules/foldersRun
npm installandnpm run buildagainEnsure Node.js 18+ is installed
š Documentation
API Reference - Detailed tool specifications
Implementation Guide - Technical architecture
Changelog - Version history
Graceful Fallbacks - Error handling strategies
š¤ Contributing
This project is open to contributions! Areas for enhancement:
Additional technical indicators
Portfolio tracking features
Alert systems
WebSocket support for real-time updates
š License
MIT License - See LICENSE file for details
š¤ Author
Hareesh Karravi - @hareeshkar
š Links
Questions? Open an issue on GitHub or check the documentation files.
get_market_summary - Daily market overview
Returns: P/E ratio, P/B ratio, foreign flow, total turnover
Stock-Specific Data
get_stock_snapshot - Real-time price data
Input: Stock symbol
Returns: Open, high, low, last price, volume, change %
get_top_gainers - Top performing stocks
Optional: Limit (default 10)
Returns: Symbol, price, % change
get_order_book - Market depth for a stock
Input: Stock symbol
Returns: Bids/asks, volumes, market pressure
get_chart_data - Historical OHLCV data
Input: Symbol, period (1=Intraday, 2=Weekly, 3=Monthly, 5=Daily)
Returns: Open, high, low, close, volume with dates
Deep Research
get_detailed_trades - Tick-by-tick trade data
Optional: Filter by symbol
Returns: Price, volume, time, buyer/seller
get_company_profile - Company information
Input: Stock symbol
Returns: Directors, secretaries, registrars, company details
get_financial_reports - Company reports
Input: Stock symbol
Returns: Links to quarterly and annual reports (PDFs)
get_noncompliance_list - At-risk companies
Returns: Companies on watch list or under enforcement action
ā ļø Use for due diligence - avoid investing in these companies
Usage Examples
In Claude Desktop
Ask questions naturally:
"What are the top 5 gainers on CSE today?""Show me the current price and order book for JKH.N0000""Which stocks are trading under 10 LKR?""Get the financial reports for DIALOG.N0000""What's the market P/E ratio and which sectors are performing best?""List all companies currently on the non-compliance watch list"Development
Local Testing
Run the development server:
npm run devBuild for Production
npm run build
npm startProject Structure
cse-mcp-server/
āāā src/
ā āāā index.ts # MCP server entry point
ā āāā cse-client.ts # CSE API wrapper (12 atomic tools)
ā āāā tools.ts # Tool definitions for Claude
āāā build/ # Compiled JavaScript (auto-generated)
āāā package.json # Dependencies and scripts
āāā tsconfig.json # TypeScript configuration
āāā .env.example # Environment template
āāā README.md # This fileAPI Details
Base URL
https://www.cse.lk/api
Features
Error Handling: Graceful fallback when API unavailable
Caching: 30-second TTL reduces API calls
Symbol Resolution: Auto-builds symbol-to-ID mapping
Data Sanitization: Removes commas from prices, handles null values
Rate Limiting
The CSE API does not publicly advertise rate limits, but best practice suggests:
Keep API calls under 10 requests per second
Use caching to minimize redundant requests
Troubleshooting
Server won't start
# Check Node.js version
node --version # Should be v18+
# Check if port 3000 is available
# Or rebuild everything
rm -rf build/ node_modules/
npm install
npm run buildClaude can't find the tools
Check the file path in
claude_desktop_config.jsonis correctEnsure the build directory exists:
npm run buildRestart Claude Desktop completely
Check Claude's error console for details
API returns empty data
CSE market may be closed (closed outside market hours)
Symbol may be incorrect (check exact symbol format)
Try
scan_marketto get list of valid symbols
Performance issues
Data is cached for 30 seconds - avoid rapid repeated calls
The CSE API may have rate limits we're not aware of
Try spreading requests over time
Disclaimer
This tool provides educational access to public CSE data. Always conduct your own due diligence before making investment decisions. The authors are not responsible for any financial losses.
License
MIT
Author
Created for CSE market research and analysis
Support
For issues, feature requests, or improvements:
Check that you're running the latest version
Review the troubleshooting section
Ensure Node.js and npm are up to date
Roadmap (Future Phases)
Phase 2: Historical data analysis, sector comparison
Phase 3: Portfolio tracking, alerts on price changes
Phase 4: Technical indicators, moving averages
Phase 5: Machine learning predictions
Available Tools
13 toolsget_chart_dataA
Get historical OHLCV (candlestick) data for charting.
| Name | Required | Description | Default |
|---|---|---|---|
| period | No | Time period: 1=Intraday, 2=Weekly, 3=Monthly, 5=Daily | 5 |
| symbol | Yes | Stock symbol |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden of behavioral disclosure. It only states the basic retrieval operation and offers no information about safety, permissions, rate limits, or any side effects. For a read-only tool, this lack of context leaves the agent without crucial behavioral details.
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 a single, concise sentence that clearly states the action and object. It avoids any unnecessary words and is immediately understandable, making it highly efficient.
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 tool is simple with only two parameters, but there is no output schema. The description does not specify the return format, the number of data points, or any defaults beyond what the schema enumerates. Given the lack of annotations, the agent may be uncertain about the exact output structure and limitations.
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?
The input schema provides full descriptions for both parameters (symbol and period), achieving 100% coverage. The tool description itself adds no additional parameter guidance beyond what the schema already includes, so it provides no extra value over the structured data.
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 ('Get') and clearly identifies the resource as 'historical OHLCV (candlestick) data for charting.' This distinguishes it from sibling tools like get_stock_snapshot or get_order_book, which serve different data needs.
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 implies usage for charting by stating 'for charting,' but it does not explicitly state when to use this tool instead of alternatives such as get_stock_snapshot or get_detailed_trades. No exclusions or conditions are mentioned, making the usage context implied rather than explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_company_profileB
Get company information: directors, secretaries, registrars.
| Name | Required | Description | Default |
|---|---|---|---|
| symbol | Yes | Stock symbol |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden of behavioral disclosure. It only lists the returned information, but does not explicitly state that it is a read-only operation, nor does it mention error handling, authentication, rate limits, or any other behavioral traits.
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 a single, front-loaded sentence that conveys the essential information with no unnecessary words. Every word earns its 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?
The tool is simple (one required parameter, no output schema) and the description adequately states what information is returned. It lacks some usage context and behavioral detail, but those are covered by other dimensions; for a simple getter, it is reasonably 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?
The schema fully describes the only parameter ('symbol' as 'Stock symbol'), achieving 100% schema description coverage. The description does not add any additional meaning or constraints beyond what is already in the schema, so the baseline score of 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 description clearly states the action ('Get') and the resource ('company information'), and specifies the content (directors, secretaries, registrars), which distinguishes it from sibling tools focused on market data, charts, and financial reports.
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?
No guidance is provided on when to use this tool versus alternatives like get_stock_snapshot or get_financial_reports. It does not state any exclusions, prerequisites, or specific use cases beyond the general purpose.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_detailed_tradesA
Get tick-by-tick trade data. Shows every individual transaction.
| Name | Required | Description | Default |
|---|---|---|---|
| symbol | No | Optional: Stock symbol to filter trades |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full responsibility for behavioral disclosure. It mentions granularity (tick-by-tick) and scope (every individual transaction), but omits important behaviors like data freshness, result size, pagination, historical depth, or real-time characteristics. This is insufficient given zero annotation support.
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 two short sentences, front-loaded with the primary verb and resource, and every word adds value. It avoids repetition and is appropriately sized for a simple 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?
Given the tool's simplicity (one optional parameter, no output schema), the description covers core purpose and data granularity, but leaves gaps around time range, data source, and returned fields. It is slightly above minimal but not 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?
The single parameter 'symbol' has a descriptive schema entry ('Optionally filter trades by stock symbol'), achieving 100% coverage. The tool description adds no additional meaning about the parameter, so the baseline score of 3 is 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 clearly states a specific verb ('Get') and resource ('tick-by-tick trade data'), and clarifies it shows every individual transaction. This distinguishes it from sibling tools like get_order_book or get_chart_data, which cover orders or aggregated 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?
Usage is implied by the phrase 'tick-by-tick' and 'every individual transaction,' suggesting it should be used when granular trade-level data is needed rather than summaries. However, no explicit alternatives, prerequisites, or exclusions are mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_financial_reportsB
Get links to quarterly and annual financial reports (PDFs).
| Name | Required | Description | Default |
|---|---|---|---|
| symbol | Yes | Stock symbol |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It states the output (links to PDFs) but does not disclose whether the operation is read-only, any rate limits, or other behavioral constraints. This is minimal transparency for a tool without annotations.
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 a single concise sentence that immediately conveys the core function. Every word earns its place, with no filler or redundancy.
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 simple tool with one parameter and no output schema, the description covers the essential purpose and output type. It is largely complete, though it could be slightly richer on usage context or expected return format.
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?
The input schema already documents the 'symbol' parameter with 100% coverage, so the baseline of 3 applies. The description adds no additional meaning or context 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 uses a specific verb 'Get' and clearly identifies the resource as 'links to quarterly and annual financial reports (PDFs)'. This distinguishes it from sibling tools like get_stock_snapshot or get_company_profile, which serve different purposes.
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 provides no guidance on when to use this tool versus alternatives. No contextual cues or exclusions are given, leaving the agent to infer usage from the tool name alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_market_statusA
Check if market is currently open or closed.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must fully disclose behavior, but it only states the tool checks open/closed status. It does not specify the return format (e.g., boolean vs string), timezone, or limitations (e.g., pre-market/after-hours), leaving important behavioral details unaddressed.
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 a single, concise sentence that front-loads the action and contains zero filler. It is appropriately sized for a tool with no parameters.
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 tool is simple and the description hints at the core outcome, but with no output schema, it could be more explicit about the exact return structure (e.g., boolean vs text) and which market is referenced. Edge cases like holidays or after-hours are not addressed, so it is not 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?
The tool has zero parameters, so the description does not need to explain any parameter semantics. The baseline of 4 is appropriate because there is no parameter-dimensional complexity to clarify.
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 'Check' and clearly identifies the resource 'market status' with the outcome 'open or closed.' This distinguishes it from sibling tools like get_market_summary and get_sectors, which focus on broader or different 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?
No guidance is provided on when to use this tool versus alternatives such as get_market_summary or scan_market. There are no mentioned contexts, prerequisites, or exclusions, leaving the agent without explicit decision criteria.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_market_summaryA
Get daily market overview including P/E ratio, P/B ratio, foreign flow, turnover.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden of behavioral disclosure. It indicates the tool retrieves daily market data and lists included fields, which is useful. However, it does not describe permissions, return format, or any edge-case behavior. The scope is partially clear ('daily') but lacks specificity.
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 a single, well-structured sentence that front-loads the main action ('Get daily market overview') and then lists the specific metrics. Every word earns its place without redundancy.
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 zero-parameter tool with no output schema, the description adequately conveys the scope and content. However, it does not specify which day's data (e.g., today vs previous trading day) or the format of the response, leaving slight ambiguity.
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?
The tool has zero parameters and an empty schema. The description confirms the tool's purpose without needing to explain parameters. Per rubric, zero parameters receives a baseline of 4, which is appropriate here.
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 the verb 'Get' and resource 'market summary', listing specific metrics (P/E ratio, P/B ratio, foreign flow, turnover). It clearly states what the tool does, though it does not explicitly differentiate it from sibling tools like get_market_status or scan_market.
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 implies usage for retrieving a daily market overview, but provides no explicit guidance on when to use this tool versus alternatives, nor any exclusions or prerequisites. The context is clear but lacks explicit 'when not to use'.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_noncompliance_listA
Get list of companies on watch list or facing enforcement action. AVOID THESE!
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the transparency burden. It discloses that the tool returns a list of noncompliant companies and adds a warning, but it does not describe return format, update frequency, or safety profile. For a simple list operation, this is adequate but not rich.
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 extremely concise at two short sentences. It front-loads the core function and the 'AVOID THESE!' warning adds value without redundancy.
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 parameterless list tool with no output schema, the description gives sufficient context about what the list contains. It could mention return field details, but given the simplicity, it is complete enough.
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?
The tool has zero parameters, so there is no parameter ambiguity. The description does not need to explain parameters, and the baseline for 0 params is 4.
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 clearly states the tool's function with a specific verb and resource: 'Get list of companies on watch list or facing enforcement action.' It distinguishes itself from sibling market data tools by focusing on noncompliance risk. The appended 'AVOID THESE!' reinforces the purpose and context.
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 implies the tool is for identifying companies to avoid via 'AVOID THESE!', but it does not explicitly state when to use this tool versus alternatives or provide exclusions. The usage context is clear but no direct alternative guidance is given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_order_bookA
Get market depth (bids vs asks) with alpha metrics: pressure index (-1=bearish to +1=bullish) and spread percentage. Shows buy/sell pressure and liquidity.
| Name | Required | Description | Default |
|---|---|---|---|
| symbol | Yes | Stock symbol (e.g., JKH.N0000) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the burden. It adds behavioral context by explaining the pressure index range (-1 to +1) and spread percentage, which tells the agent what to expect in the output. However, it does not disclose potential limitations like data freshness, depth levels, or error behavior, leaving some transparency gaps.
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 two focused sentences, front-loaded with the core function and enriched with metric definitions. There is no redundant wording or filler.
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?
Given the tool's simplicity (one parameter, no output schema), the description adequately covers the return content and key metrics. It lacks details about output structure or depth levels, but for the agent's purposes, it provides sufficient context to select and interpret the tool.
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?
The schema already documents the 'symbol' parameter with an example (JKH.N0000), and the description does not add additional parameter semantics. Since schema coverage is 100%, the baseline of 3 applies; the description adds no extra parameter-specific value.
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 clearly states the tool returns market depth (bids vs asks) and specifies unique alpha metrics (pressure index, spread percentage) that distinguish it from sibling market data tools like get_stock_snapshot or get_market_summary. The verb 'Get' plus resource 'market depth' is specific and unambiguous.
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 implies the tool is for analyzing buy/sell pressure and liquidity, giving clear context for when to use it. However, it does not explicitly name alternatives or state when not to use it, so it stops short of full usage guidance. The mention of alpha metrics indicates a trading-analysis use case.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_sectorsA
Get performance data for all market sectors including change % and turnover.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden of behavioral disclosure. It only states the output fields and scope, but does not disclose any behavioral aspects such as data freshness, read-only nature, or potential limitations. This is minimal beyond the obvious purpose.
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 a single, front-loaded sentence of 13 words that immediately states the action and scope without any fluff or redundancy.
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 zero-parameter read-only data retrieval tool, the description adequately explains what is returned (sector performance data with change % and turnover). No output schema exists, but the description sufficiently sets expectations for a simple tool.
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?
The tool accepts no parameters, so there is no parameter semantics to clarify. The baseline of 4 for zero-parameter tools is 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 clearly states the tool retrieves performance data for all market sectors, specifying fields (change %, turnover). This distinguishes it from sibling tools like get_market_summary or get_top_gainers which focus on overall market or individual stocks.
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 implies usage when sector-level performance data is needed, but provides no explicit guidance on when to prefer this over alternatives. No exclusions or comparisons are mentioned, so usage is only implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_stock_snapshotA
Get real-time data for a stock: open, high, low, last price, volume.
| Name | Required | Description | Default |
|---|---|---|---|
| symbol | Yes | Stock symbol (e.g., DIAL.N0000) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It mentions 'real-time data' and the fields returned, but it does not disclose behaviors such as data delays, error handling for invalid symbols, rate limits, or whether the data is from a live feed or cached. For a read-only tool with no annotations, this is a significant gap.
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 a single sentence, clearly front-loaded with the verb and resource, and lists the specific data points concisely. Every word adds value with no redundancy.
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?
Given the low complexity (one parameter, no nested objects) and full schema coverage, the description is reasonably complete. It lists the return fields even without an output schema. However, it omits context like currency or exchange nuances, but for a snapshot tool this is acceptable.
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?
The schema has 100% coverage for the single parameter 'symbol' with its description and example format. The tool description adds no additional parameter semantics beyond the schema, so the baseline of 3 applies per the guidelines.
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 clearly states what the tool does: 'Get real-time data for a stock' and enumerates specific fields (open, high, low, last price, volume). This distinguishes it from sibling tools like get_chart_data or get_order_book, which focus on different data types.
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 implies the tool is for obtaining a current snapshot of a single stock, but it does not explicitly state when to use it over alternatives like get_chart_data for historical data or get_market_summary for broader market context. No exclusions or alternative guidance is provided, but the purpose is clear enough that an agent can infer usage.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_top_gainersA
Get list of top performing stocks (highest % increase).
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Number of stocks to return (default: 10) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the burden. It clearly implies a read-only operation and even indicates a sorting behavior (by highest % increase). However, it doesn't disclose other potentially relevant traits like whether the data is real-time, whether it reflects intraday or end-of-day, or what fields each stock entry contains. For a simple read-only tool this is acceptable but not rich.
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 a single, focused sentence that states exactly what the tool returns and the criterion for 'top'. No wasted words, and it is appropriately front-loaded.
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 simple list tool with one optional parameter and no output schema, the description is adequate. It states the purpose and the ranking criterion. However, it doesn't specify the structure of the returned items (e.g., whether it includes price, change amount, etc.), which could be considered a minor gap. Given the tool's simplicity, this is nearly 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?
The schema covers 100% of the parameter documentation: the 'limit' parameter is fully described with a default value. The description adds no additional meaning beyond the schema, so the baseline score of 3 is 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 ('Get') and resource ('list of top performing stocks') with a clear qualifier ('highest % increase'). This unambiguously distinguishes it from the sibling tool 'get_top_losers' and other market-related tools.
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 makes the context clear: use this tool when you need top-performing stocks ranked by percentage increase. While it doesn't explicitly mention alternatives, the function is so narrowly scoped that an agent can easily infer when it applies compared to siblings like 'get_market_summary' or 'scan_market'.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_top_losersA
Get list of worst performing stocks (highest % decrease). Useful for identifying oversold opportunities or risk screening.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Number of stocks to return (default: 10) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must carry the full burden. It states the tool returns a list sorted by percentage decrease, but does not specify the time period (e.g., daily, intraday), data freshness, or other behavioral nuances. Adequate for a simple tool but lacks depth.
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 two sentences: first states the core purpose, second gives practical use cases. No redundant information, front-loaded with the main function.
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 covers purpose, output type, and typical use cases, which is sufficient for a simple tool with one optional parameter. However, it omits the timeframe for 'worst performing' (e.g., daily), which could be important for selection.
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?
The only parameter, 'limit', is fully documented in the schema with a default and description. The tool description adds no additional parameter context, which is acceptable given 100% schema coverage.
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 ('Get list of worst performing stocks') and clarifies the metric (highest % decrease). It clearly distinguishes from the sibling tool get_top_gainers by focusing on losers.
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 provides clear use cases ('identifying oversold opportunities or risk screening') but does not explicitly mention alternatives or when not to use this tool. It offers context but lacks exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
scan_marketA
Get list of all stocks trading on CSE with current prices. Can filter by max price for penny stock scanning and minimum volume to exclude dead/illiquid stocks.
| Name | Required | Description | Default |
|---|---|---|---|
| maxPrice | No | Optional: Only return stocks priced below this value (in LKR) | |
| minVolume | No | Optional: Only return stocks with volume above this threshold (filters dead stocks) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description bears full responsibility for disclosing behavior. It accurately describes a read-only operation returning a list with current prices and optional filtering, and there are no hidden side effects. It does not detail the exact response structure or potential limitations, but for a simple list tool this is adequate.
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 a single, front-loaded sentence that states the main purpose immediately, followed by a second clause about filters. Every word earns its place, with no redundancy or irrelevant detail.
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?
Given the tool's low complexity (2 optional params, no output schema), the description covers all essential aspects: what it returns, the exchange filtered, and the optional filters with their intended use. It is complete for a straightforward market scanner.
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?
The input schema already provides descriptive coverage for both parameters (100%), so the baseline is 3. The description adds valuable context by linking maxPrice to 'penny stock scanning' and minVolume to 'exclude dead/illiquid stocks', enriching the semantics beyond mere schema descriptions.
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 clearly states the action ('Get list'), resource ('all stocks trading on CSE'), and provides scope ('current prices'). This is specific and distinguishes it from sibling tools that focus on specific subsets like top gainers, order books, or sector summaries.
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 clear use-case context for its filters ('penny stock scanning', 'exclude dead/illiquid stocks'), implying when to use the tool. However, it does not explicitly name alternative tools or state when not to use it, leaving some room for ambiguity in tool selection.
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. Dates show when Glama detected each change.
13 tool updates
v1.0.0- First observed
get_chart_data - First observed
get_company_profile - First observed
get_detailed_trades - First observed
get_financial_reports - First observed
get_market_status - First observed
get_market_summary - First observed
get_noncompliance_list - First observed
get_order_book - First observed
get_sectors - First observed
get_stock_snapshot - First observed
get_top_gainers - First observed
get_top_losers - First observed
scan_market
TDQS
Each tool targets a distinct data resource: market-wide scans, sector performance, status, summary, gainers/losers, depth, snapshots, historical data, trades, company profiles, and compliance lists. The descriptions clearly differentiate between similar concepts like order book vs. trades or real-time vs. historical data, leaving no ambiguity.
All but one tool follow a consistent 'get_' prefix (e.g., get_sectors, get_order_book). The single outlier, 'scan_market', uses a different verb, breaking the pattern slightly. Overall the style is predictable and readable, with only a minor deviation.
With 13 tools, the set is well-scoped for a market data server. Each tool covers a distinct aspectāmarket overview, stock data, depth, trades, and fundamentalsāwithout feeling bloated or sparse.
The tool surface is comprehensive for most market data needs: it includes scanning, by-security data, market-wide metrics, trading details, and company info. A notable gap is the absence of index performance data (e.g., ASPI, S&P SL20) and possibly market news, but core workflows are well covered.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
Hosted MCP for stocks, options, Greeks, brokers, order previews, alerts, and workflows.
MCP server giving AI agents one-connection access to China A-share market intelligence: financials,
Real-time market events, sentiment, and technical analysis as MCP tools, backed by real data.
Research-only MCP server: turn your AI into a quant research desk ā backtests, no trades.
Related MCP Servers
- FlicenseBqualityCmaintenanceA production-grade MCP server for FIX protocol trading operations that enables order management, session repair, and algorithmic execution. It provides specialized tools for monitoring session health, managing ticker reference data, and executing complex trading scenarios.22-
- AlicenseAqualityCmaintenanceA Model Context Protocol server for the Colombo Stock Exchange that enables users to search listed companies, fetch stock quotes, and retrieve real-time market snapshots. It provides a structured interface for AI tools to access CSE data, including top gainers, losers, and index summaries.7653ISC

Sablier MCP Serverofficial
AlicenseAqualityDmaintenanceAn MCP server that lets AI assistants analyze portfolios, stress-test scenarios, generate synthetic market paths, and scan SEC filings ā in under 2 minutes.833MIT- AlicenseAqualityCmaintenanceComprehensive MCP server for real-time stock, cryptocurrency, options, and fundamental analysis, including SEC filings and insider trading data.2628MIT
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/hareeshkar/cse-mcp-intelligence'
If you have feedback or need assistance with the MCP directory API, please join our Discord server