Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions .env.sample
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
BUFFETT_CODE_BASE_URL=https://api.buffett-code.com
# the official API key for testing, ref. https://docs.buffett-code.com/api/#section/%E8%AA%8D%E8%A8%BC/API
BUFFETT_CODE_API_KEY=sAJGq9JH193KiwnF947v74KnDYkO7z634LWQQfPY
22 changes: 11 additions & 11 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,17 +1,17 @@
# buffette-code-mcp-server
# buffett-code-mcp-server

A [MCP(Model Context Protocol)](https://www.anthropic.com/news/model-context-protocol) server that accesses to [buffet code API](https://docs.buffett-code.com/api/).
A [MCP(Model Context Protocol)](https://www.anthropic.com/news/model-context-protocol) server that accesses to [buffett-code API](https://docs.buffett-code.com/api/).

## Features

Available tools:

- `buffetcode_get_company` - Get company information from Buffett Code
- `buffetcode_get_company_daily` - Get daily company information from Buffett Code for a specific date
- `buffetcode_get_company_quarterly` - Get quarterly company information from Buffett Code for a specific year and quarter
- `buffetcode_get_company_stocks` - Get company stock information from Buffett Code for a specific stock
- `buffetcode_get_company_stocks_daily` Get daily company stock information from Buffett Code for a specific stock and date
- `buffetcode_get_company_stocks_quarterly` - Get quarterly company stock information from Buffett Code for a specific stock and year-quarter
- `buffett_code_get_us_company` - Get company information from Buffett Code
- `buffett_code_get_us_company_daily` - Get daily company information from Buffett Code for a specific date
- `buffett_code_get_us_company_quarterly` - Get quarterly company information from Buffett Code for a specific year and quarter
- `buffett_code_get_us_company_stocks` - Get company stock information from Buffett Code for a specific stock
- `buffett_code_get_us_company_stocks_daily` Get daily company stock information from Buffett Code for a specific stock and date
- `buffett_code_get_us_company_stocks_quarterly` - Get quarterly company stock information from Buffett Code for a specific stock and year-quarter

## Quick Start

Expand All @@ -29,10 +29,10 @@ TBD

```json
...
"buffet-code": {
"buffett-code": {
"command": "node",
"args": [
"/path/to/buffet-code-mcp-server/dist/index.js"
"/path/to/buffett-code-mcp-server/dist/index.js"
],
"env": {
}
Expand All @@ -52,7 +52,7 @@ npm install -D tsx
```json
{
"mcpServers": {
"buffet-code": {
"buffett-code": {
"command": "npx",
"args": [
"tsx",
Expand Down
93 changes: 93 additions & 0 deletions examples/get_us_company.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,93 @@
import { Client } from '@modelcontextprotocol/sdk/client/index.js';
import { StdioClientTransport } from '@modelcontextprotocol/sdk/client/stdio.js';
import { config } from 'dotenv';
import { fileURLToPath } from 'node:url';
import { dirname, resolve } from 'node:path';
import { CallToolResult, CallToolResultSchema } from '@modelcontextprotocol/sdk/types.js';

// Get the current file's directory
const __filename = fileURLToPath(import.meta.url);
const __dirname = dirname(__filename);

// Load environment variables from .env file
config();

// Get and validate required environment variables
const apiKey = process.env.BUFFETT_CODE_API_KEY;
if (!apiKey) {
throw new Error(
'BUFFETT_CODE_API_KEY environment variable is required. Set it in your .env file.'
);
}

// Compose env for child process
const env = {
BUFFETT_CODE_API_KEY: apiKey,
} as const satisfies Record<string, string>;

async function main() {
// Initialize MCP client
const client = new Client(
{
name: 'buffett-code-mcp-example-client',
version: '1.0.0',
},
{
capabilities: {},
}
);

// Create transport to connect to the server
const transport = new StdioClientTransport({
command: process.execPath,
args: [
resolve(__dirname, '../dist/index.js'), // pre-build server
],
env,
});

try {
// Connect to the server
await client.connect(transport);
console.log('Connected to BuffetCode MCP server');

// List available tools
const toolsResponse = await client.listTools();

console.log('Available tools:');
toolsResponse.tools.forEach(tool => {
console.log(`- ${tool.name}: ${tool.description}`);
});

const response = (await client.callTool(
{
name: 'buffett_code_get_us_company',
arguments: {
companyId: '0001652044', // Google (Alphabet) EDINET code
},
},
CallToolResultSchema
)) as CallToolResult;

if (
Array.isArray(response.content) &&
response.content[0]?.type === 'text'
) {
const data = JSON.parse(response.content[0].text);
console.log('Company data (example):', data);
} else {
console.error('Unexpected response format for example call');
}
} catch (error) {
console.error('Error:', error);
process.exit(1);
} finally {
await transport.close();
console.log('Connection closed.');
}
}

main().catch((error) => {
console.error('Fatal error in main:', error);
process.exit(1);
});
Loading