Skip to main content
Glama
test-mcp-server.js5.96 kB
#!/usr/bin/env node // Test script for SEC EDGAR MCP Server capabilities via MCP SDK Client const { Client } = require('@modelcontextprotocol/sdk/client/index.js'); const { StdioClientTransport } = require('@modelcontextprotocol/sdk/client/stdio.js'); const path = require('path'); const serverPath = path.join(__dirname, '..', 'build', 'index.js'); async function runTests() { console.log('🧪 Testing SEC EDGAR MCP Server via MCP SDK\n'); console.log('='.repeat(60)); const transport = new StdioClientTransport({ command: 'node', args: [serverPath] }); const client = new Client({ name: 'test-client', version: '1.0.0' }); try { await client.connect(transport); console.log('✅ Connected to MCP server\n'); // Test 1: List tools console.log('1️⃣ Testing tools/list...'); const tools = await client.listTools(); console.log(` ✅ Found ${tools.tools.length} tool(s): ${tools.tools.map(t => t.name).join(', ')}`); console.log(''); // Test 2: search_companies console.log('2️⃣ Testing search_companies (Apple)...'); const searchResult = await client.callTool({ name: 'sec-edgar', arguments: { method: 'search_companies', query: 'Apple' } }); const searchData = JSON.parse(searchResult.content[0].text); console.log(` ✅ Found ${searchData.companies?.length || 0} companies`); if (searchData.companies?.[0]) { console.log(` 📊 First: ${searchData.companies[0].title} (${searchData.companies[0].ticker})`); } console.log(''); // Test 3: get_company_cik console.log('3️⃣ Testing get_company_cik (AAPL)...'); const cikResult = await client.callTool({ name: 'sec-edgar', arguments: { method: 'get_company_cik', ticker: 'AAPL' } }); const cikData = JSON.parse(cikResult.content[0].text); console.log(` ✅ AAPL CIK: ${cikData.cik}`); console.log(''); // Test 4: get_company_submissions console.log('4️⃣ Testing get_company_submissions (AAPL)...'); const subResult = await client.callTool({ name: 'sec-edgar', arguments: { method: 'get_company_submissions', cik_or_ticker: 'AAPL' } }); const subData = JSON.parse(subResult.content[0].text); console.log(` ✅ Company: ${subData.name}`); console.log(` 📄 Recent filings: ${subData.filings?.recent?.form?.length || 0}`); console.log(''); // Test 5: get_company_facts console.log('5️⃣ Testing get_company_facts (AAPL)...'); const factsResult = await client.callTool({ name: 'sec-edgar', arguments: { method: 'get_company_facts', cik_or_ticker: 'AAPL' } }); const factsData = JSON.parse(factsResult.content[0].text); const taxonomies = Object.keys(factsData.facts || {}); console.log(` ✅ Taxonomies: ${taxonomies.join(', ')}`); console.log(''); // Test 6: get_company_concept console.log('6️⃣ Testing get_company_concept (AAPL Assets)...'); const conceptResult = await client.callTool({ name: 'sec-edgar', arguments: { method: 'get_company_concept', cik_or_ticker: 'AAPL', taxonomy: 'us-gaap', tag: 'Assets' } }); const conceptData = JSON.parse(conceptResult.content[0].text); const latestAssets = conceptData.units?.USD?.slice(-1)[0]; if (latestAssets) { console.log(` ✅ Latest Assets: $${(latestAssets.val / 1000000).toFixed(0)}M (${latestAssets.end})`); } console.log(''); // Test 7: get_frames_data console.log('7️⃣ Testing get_frames_data (Assets CY2024Q3I)...'); const framesResult = await client.callTool({ name: 'sec-edgar', arguments: { method: 'get_frames_data', taxonomy: 'us-gaap', tag: 'Assets', unit: 'USD', frame: 'CY2024Q3I' } }); const framesData = JSON.parse(framesResult.content[0].text); console.log(` ✅ Frame data: ${framesData.data?.length || 0} companies`); console.log(''); // Test 8: build_fact_table console.log('8️⃣ Testing build_fact_table (JNJ ~$638M)...'); const tableResult = await client.callTool({ name: 'sec-edgar', arguments: { method: 'build_fact_table', cik_or_ticker: 'JNJ', target_value: 638000000, tolerance: 50000000 } }); const tableData = JSON.parse(tableResult.content[0].text); console.log(` ✅ Fact table built: ${tableData.summary?.totalFacts || tableData.facts?.length || 0} facts found`); console.log(''); // Test 9: time_series_dimensional_analysis console.log('9️⃣ Testing time_series_dimensional_analysis (JNJ)...'); const tsResult = await client.callTool({ name: 'sec-edgar', arguments: { method: 'time_series_dimensional_analysis', cik_or_ticker: 'JNJ', time_series_options: { concept: 'RevenueFromContractWithCustomerExcludingAssessedTax', periods: 4 } } }); const tsData = JSON.parse(tsResult.content[0].text); console.log(` ✅ Time series: ${tsData.periods?.length || tsData.analysis?.length || 'completed'}`); console.log(''); console.log('='.repeat(60)); console.log('🎉 All MCP server tests completed successfully!\n'); console.log('📋 Summary:'); console.log(' ✅ Tool listing'); console.log(' ✅ search_companies'); console.log(' ✅ get_company_cik'); console.log(' ✅ get_company_submissions'); console.log(' ✅ get_company_facts'); console.log(' ✅ get_company_concept'); console.log(' ✅ get_frames_data'); console.log(' ✅ build_fact_table'); console.log(' ✅ time_series_dimensional_analysis'); } catch (error) { console.error('❌ Test failed:', error.message); console.error(error.stack); process.exit(1); } finally { await client.close(); } } runTests();

Latest Blog Posts

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/openpharma-org/sec-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server