mcp-saham-news
MCP Server - Indonesian Stock News Scraper
MCP (Model Context Protocol) server for scraping Indonesian stock market news from multiple sources.
Features
Multiple Sources: Scrapes from 4 major Indonesian financial news websites:
EmitenNews.com
CNBC Indonesia
Kontan
Bisnis Indonesia
MCP Compatible: Built with the official MCP SDK
Headless Chrome: Uses Puppeteer for reliable scraping
Type-Safe: Written in TypeScript with Zod validation
Keyword Filtering: Filter articles by keywords
Structured Logging: Pino logger for debugging
Installation
npm install -g mcp-saham-newsConfiguration
The server requires Chrome/Chromium and uses environment variables:
# Required: Path to Chrome executable
export PUPPETEER_EXECUTABLE_PATH=/usr/bin/google-chrome
# Optional: Log level (debug, info, warn, error)
export LOG_LEVEL=infoInstall Chrome (if not already installed)
# Ubuntu/Debian
sudo apt-get install chromium-browser
# macOS
brew install chromiumMCP Client Setup
KiloCode / Cline (VS Code)
Add to your MCP settings (global or workspace):
{
"mcpServers": {
"saham-news": {
"command": "npx",
"args": ["mcp-saham-news"],
"env": {
"PUPPETEER_EXECUTABLE_PATH": "/usr/bin/google-chrome",
"LOG_LEVEL": "info"
},
"disabled": false,
"alwaysAllow": ["scrape_stock_news"]
}
}
}Claude Desktop
Edit ~/Library/Application Support/Claude/claude_desktop_config.json (macOS) or %APPDATA%/Claude/claude_desktop_config.json (Windows):
{
"mcpServers": {
"saham-news": {
"command": "npx",
"args": ["mcp-saham-news"],
"env": {
"PUPPETEER_EXECUTABLE_PATH": "/usr/bin/google-chrome"
}
}
}
}Alternatively, use the globally installed command:
{
"mcpServers": {
"saham-news": {
"command": "mcp-saham-news",
"env": {
"PUPPETEER_EXECUTABLE_PATH": "/usr/bin/google-chrome"
}
}
}
}Restart Client
Restart Claude Desktop or VS Code to load the MCP server.
MCP Tool
scrape_stock_news
Scrape latest Indonesian stock market news.
Parameters:
source(required): News source -cnbc,kontan,bisnis,emitennews, oralllimit(optional): Number of articles to return (1-50, default: 10)keywords(optional): Array of keywords to filter articlesincludeContent(optional): Fetch full article body (default: false)
Example:
{
"source": "emitennews",
"limit": 5,
"keywords": ["BBRI", "BBCA"]
}Response:
[
{
"title": "Article title",
"url": "https://...",
"source": "EmitenNews.com",
"publishedAt": "2026-02-14T02:00:00.000Z",
"summary": "Optional summary",
"imageUrl": "https://...",
"relativeDateText": "4 jam yang lalu"
}
]Development
Build the Project
npm run buildRun in Development Mode
npm run devTest Individual Scrapers
# Test EmitenNews scraper
npx tsx src/scrapers/emitennews.ts
# Test CNBC scraper
npx tsx src/scrapers/cnbc-indonesia.tsProject Structure
src/
├── index.ts # MCP server entry point
├── types/index.ts # TypeScript type definitions
├── browser-manager.ts # Puppeteer browser manager
├── scrapers/
│ ├── base.ts # Abstract base scraper
│ ├── emiteanews.ts
│ ├── cnbc-indonesia.ts
│ ├── kontan.ts
│ └── bisnis-indonesia.ts
└── tools/
└── scrape-news.ts # MCP tool implementationLicense
ISC
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/nofendian17/stock-news-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server