diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..979bc6f --- /dev/null +++ b/Dockerfile @@ -0,0 +1,25 @@ +# Generated by https://smithery.ai. See: https://smithery.ai/docs/config#dockerfile +# Use an official Node.js runtime as a parent image +FROM node:14-alpine + +# Set the working directory in the container +WORKDIR /app + +# Copy the current directory contents into the container at /app +COPY . . + +# Install any needed packages +RUN npm install + +# Make the CLI script executable +RUN chmod +x bin/cli.js + +# Make port 3000 available to the world outside this container +EXPOSE 3000 + +# Define environment variables +ENV AXIOM_TOKEN= +ENV AXIOM_ORG_ID= + +# Run the application +ENTRYPOINT ["node", "bin/cli.js"] \ No newline at end of file diff --git a/README.md b/README.md index 31fb7c5..c457379 100644 --- a/README.md +++ b/README.md @@ -1,11 +1,21 @@ # MCP Server for Axiom +[![smithery badge](https://smithery.ai/badge/@ThetaBird/mcp-server-axiom-js)](https://smithery.ai/server/@ThetaBird/mcp-server-axiom-js) + A JavaScript port of the [official Axiom MCP server](https://github.com/axiomhq/mcp-server-axiom) that enables AI agents to query data using Axiom Processing Language (APL). This implementation provides the same functionality as the original Go version but packaged as an npm module for easier integration with Node.js environments. ## Installation & Usage +### Installing via Smithery + +To install Axiom MCP Server for Claude Desktop automatically via [Smithery](https://smithery.ai/server/@ThetaBird/mcp-server-axiom-js): + +```bash +npx -y @smithery/cli install @ThetaBird/mcp-server-axiom-js --client claude +``` + ### MCP Configuration You can run this MCP server directly using npx. Add the following configuration to your MCP configuration file: diff --git a/smithery.yaml b/smithery.yaml new file mode 100644 index 0000000..6bf927b --- /dev/null +++ b/smithery.yaml @@ -0,0 +1,45 @@ +# Smithery configuration file: https://smithery.ai/docs/config#smitheryyaml + +startCommand: + type: stdio + configSchema: + # JSON Schema defining the configuration options for the MCP. + type: object + required: + - axiomToken + - axiomOrgId + properties: + axiomToken: + type: string + description: Your Axiom API token. + axiomOrgId: + type: string + description: Your Axiom organization ID. + axiomUrl: + type: string + default: https://api.axiom.co + description: The Axiom API URL. + axiomQueryRate: + type: number + default: 1 + description: Queries per second limit. + axiomQueryBurst: + type: number + default: 1 + description: Query burst capacity. + axiomDatasetsRate: + type: number + default: 1 + description: Dataset list operations per second. + axiomDatasetsBurst: + type: number + default: 1 + description: Dataset list burst capacity. + port: + type: number + default: 3000 + description: Server port. + commandFunction: + # A function that produces the CLI command to start the MCP on stdio. + |- + (config) => ({command:'node', args:['bin/cli.js'], env: {AXIOM_TOKEN: config.axiomToken, AXIOM_ORG_ID: config.axiomOrgId, AXIOM_URL: config.axiomUrl || 'https://api.axiom.co', AXIOM_QUERY_RATE: config.axiomQueryRate?.toString() || '1', AXIOM_QUERY_BURST: config.axiomQueryBurst?.toString() || '1', AXIOM_DATASETS_RATE: config.axiomDatasetsRate?.toString() || '1', AXIOM_DATASETS_BURST: config.axiomDatasetsBurst?.toString() || '1', PORT: config.port?.toString() || '3000'}}) \ No newline at end of file