Skill: haveblue997/mcp-crypto-data (version 1.0.0)

--- name: mcp-crypto-data description: Real-time cryptocurrency prices, network fee estimates, and Lightning Network statistics via L402 API. Use when agents need crypto market data, fee planning, or Lightning network health checks. version: 1.0.0 metadata: openclaw: requires: bins: - npx env: - L402_API_BASE_URL emoji: ₿ --- # Crypto Data (L402) Real-time cryptocurrency data — prices, fees, and Lightning Network stats. ## Setup ```json { "mcpServers": { "crypto-data": { "command": "npx", "args": ["-y", "@vbotholemu/mcp-crypto-data"], "env": { "L402_API_BASE_URL": "https://api.nautdev.com" } } } } ``` ## Tools ### `get_crypto_price` Real-time price for any supported cryptocurrency. ### `get_network_fees` Current transaction fee estimates for Bitcoin and other networks. ### `get_lightning_stats` Lightning Network statistics — node count, channel count, total capacity. ## When to Use - Portfolio monitoring and price checks - Transaction fee estimation before sends - Lightning Network health monitoring - Market data for trading agents

path: README.md
content: # @blue-trianon/mcp-crypto-data

MCP tool for cryptocurrency data — real-time prices, network fees, and Lightning Network statistics via the L402 API.

## Features

- Real-time cryptocurrency prices
- Network transaction fee estimates
- Lightning Network statistics (nodes, channels, capacity)
- Configurable base URL via environment variable
- Powered by L402 micropayments

## MCP Server Configuration

Add to your MCP client configuration:

```json
{
  "mcpServers": {
    "crypto-data": {
      "command": "npx",
      "args": ["-y", "@blue-trianon/mcp-crypto-data"],
      "env": {
        "NAUTDEV_BASE_URL": "https://api.nautdev.com"
      }
    }
  }
}
```

Or if installed globally:

```json
{
  "mcpServers": {
    "crypto-data": {
      "command": "mcp-crypto-data"
    }
  }
}
```

## Tools

### price

Get the current price for a cryptocurrency.

| Parameter | Type   | Required | Description                                      |
|-----------|--------|----------|--------------------------------------------------|
| coin      | string | yes      | Cryptocurrency identifier (e.g. bitcoin, ethereum) |

### fees

Get current network transaction fees across major cryptocurrencies.

No parameters required.

### lightning_stats

Get current Lightning Network statistics.

No parameters required.

## Pricing

Requests are metered via L402 micropayments. See [Blue-Trianon-Ventures](https://github.com/Blue-Trianon-Ventures) for pricing details.

## License

MIT


path: dist/index.d.ts
content: #!/usr/bin/env node
export {};
//# sourceMappingURL=index.d.ts.map

path: dist/index.js
content: #!/usr/bin/env node
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
const mcp_js_1 = require("@modelcontextprotocol/sdk/server/mcp.js");
const stdio_js_1 = require("@modelcontextprotocol/sdk/server/stdio.js");
const zod_1 = require("zod");
const BASE_URL = process.env.NAUTDEV_BASE_URL || "https://api.nautdev.com";
async function apiFetch(path) {
    const response = await fetch(`${BASE_URL}${path}`, {
        headers: { Accept: "application/json" },
    });
    if (!response.ok) {
        throw new Error(`API error: ${response.status} ${response.statusText}`);
    }
    return response.json();
}
const server = new mcp_js_1.McpServer({
    name: "crypto-data",
    version: "1.0.0",
});
server.tool("price", "Get the current price for a cryptocurrency (e.g. bitcoin, ethereum).", {
    coin: zod_1.z.string().describe("Cryptocurrency identifier (e.g. bitcoin, ethereum, solana)"),
}, async ({ coin }) => {
    try {
        const result = await apiFetch(`/api/v1/crypto/price?coin=${encodeURIComponent(coin)}`);
        return {
            content: [{ type: "text", text: JSON.stringify(result, null, 2) }],
        };
    }
    catch (error) {
        const message = error instanceof Error ? error.message : String(error);
        return {
            content: [{ type: "text", text: JSON.stringify({ error: `Failed to fetch price: ${message}` }) }],
            isError: true,
        };
    }
});
server.tool("fees", "Get current network transaction fees across major cryptocurrencies.", {}, async () => {
    try {
        const result = await apiFetch(`/api/v1/crypto/fees`);
        return {
            content: [{ type: "text", text: JSON.stringify(result, null, 2) }],
        };
    }
    catch (error) {
        const message = error instanceof Error ? error.message : String(error);
        return {
            content: [{ type: "text", text: JSON.stringify({ error: `Failed to fetch fees: ${message}` }) }],
            isError: true,
        };
    }
});
server.tool("lightning_stats", "Get current Lightning Network statistics — node count, channel count, capacity, and more.", {}, async () => {
    try {
        const result = await apiFetch(`/api/v1/crypto/lightning/stats`);
        return {
            content: [{ type: "text", text: JSON.stringify(result, null, 2) }],
        };
    }
    catch (error) {
        const message = error instanceof Error ? error.message : String(error);
        return {
            content: [{ type: "text", text: JSON.stringify({ error: `Failed to fetch Lightning stats: ${message}` }) }],
            isError: true,
        };
    }
});
async function main() {
    const transport = new stdio_js_1.StdioServerTransport();
    await server.connect(transport);
}
main().catch((error) => {
    console.error("Server error:", error);
    process.exit(1);
});
//# sourceMappingURL=index.js.map

path: package.json
content: {
  "name": "@vbotholemu/mcp-crypto-data",
  "version": "1.0.0",
  "description": "MCP tool for cryptocurrency data — prices, network fees, and Lightning Network stats via L402 API",
  "main": "dist/index.js",
  "types": "dist/index.d.ts",
  "bin": {
    "mcp-crypto-data": "dist/index.js"
  },
  "scripts": {
    "build": "tsc",
    "start": "node dist/index.js",
    "dev": "tsc --watch"
  },
  "keywords": [
    "mcp",
    "crypto",
    "bitcoin",
    "lightning",
    "price",
    "l402"
  ],
  "author": "Blue-Trianon-Ventures",
  "license": "MIT",
  "dependencies": {
    "@modelcontextprotocol/sdk": "^1.12.1",
    "zod": "^3.23.0"
  },
  "devDependencies": {
    "typescript": "^5.7.0",
    "@types/node": "^22.0.0"
  }
}


path: src/index.ts
content: #!/usr/bin/env node

import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
import { z } from "zod";

const BASE_URL = process.env.NAUTDEV_BASE_URL || "https://api.nautdev.com";

async function apiFetch<T>(path: string): Promise<T> {
  const response = await fetch(`${BASE_URL}${path}`, {
    headers: { Accept: "application/json" },
  });

  if (!response.ok) {
    throw new Error(`API error: ${response.status} ${response.statusText}`);
  }

  return response.json() as Promise<T>;
}

const server = new McpServer({
  name: "crypto-data",
  version: "1.0.0",
});

server.tool(
  "price",
  "Get the current price for a cryptocurrency (e.g. bitcoin, ethereum).",
  {
    coin: z.string().min(1).describe("Cryptocurrency identifier (e.g. bitcoin, ethereum, solana)"),
  },
  async ({ coin }) => {
    try {
      const result = await apiFetch(`/api/v1/crypto/price?coin=${encodeURIComponent(coin)}`);
      return {
        content: [{ type: "text" as const, text: JSON.stringify(result, null, 2) }],
      };
    } catch (error) {
      const message = error instanceof Error ? error.message : String(error);
      return {
        content: [{ type: "text" as const, text: JSON.stringify({ error: `Failed to fetch price: ${message}` }) }],
        isError: true,
      };
    }
  }
);

server.tool(
  "fees",
  "Get current network transaction fees across major cryptocurrencies.",
  {},
  async () => {
    try {
      const result = await apiFetch(`/api/v1/crypto/fees`);
      return {
        content: [{ type: "text" as const, text: JSON.stringify(result, null, 2) }],
      };
    } catch (error) {
      const message = error instanceof Error ? error.message : String(error);
      return {
        content: [{ type: "text" as const, text: JSON.stringify({ error: `Failed to fetch fees: ${message}` }) }],
        isError: true,
      };
    }
  }
);

server.tool(
  "lightning_stats",
  "Get current Lightning Network statistics — node count, channel count, capacity, and more.",
  {},
  async () => {
    try {
      const result = await apiFetch(`/api/v1/crypto/lightning/stats`);
      return {
        content: [{ type: "text" as const, text: JSON.stringify(result, null, 2) }],
      };
    } catch (error) {
      const message = error instanceof Error ? error.message : String(error);
      return {
        content: [{ type: "text" as const, text: JSON.stringify({ error: `Failed to fetch Lightning stats: ${message}` }) }],
        isError: true,
      };
    }
  }
);

async function main() {
  const transport = new StdioServerTransport();
  await server.connect(transport);
}

main().catch((error) => {
  console.error("Server error:", error);
  process.exit(1);
});


path: tsconfig.json
content: {
  "extends": "../../tsconfig.base.json",
  "compilerOptions": {
    "outDir": "dist",
    "rootDir": "src"
  },
  "include": ["src"]
}


Security scan verdicts — ClawScan: clean | static analysis: suspicious | VirusTotal: clean | SkillSpector: clean (LOW)