#!/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();