SA Crypto Tax Rules
SA crypto tax: FIFO capital gains, tax estimates, CGT exclusion, capital vs revenue, CARF
作者提供的说明(英文原文)
Abstraxn: public Web3 MCP server for read-only chain data and pay-per-call relays.
这三项永远不会合并成一个分数:意见、测量和人气是不同的东西。
我们还没有为它写通俗的介绍。下面是我们从注册中心读取到的事实。
选择你使用的 AI 应用,然后复制设置。
你需要
你用的是哪个应用?
在上方选择你的应用。我们会记住它,下次按钮会显示“安装到 …”。
适用于网页版、桌面版和手机版 Claude:
https://mcp.abstraxn.com/mcp在终端中运行这条命令
claude mcp add --transport http abstraxn https://mcp.abstraxn.com/mcp粘贴到项目中的 .cursor/mcp.json,或 ~/.cursor/mcp.json
{
"mcpServers": {
"abstraxn": {
"url": "https://mcp.abstraxn.com/mcp"
}
}
}浏览器会先询问是否打开应用,然后应用会显示设置并请你确认。密钥的值会留空,由你自己填写。
粘贴到项目中的 .vscode/mcp.json
{
"servers": {
"abstraxn": {
"type": "http",
"url": "https://mcp.abstraxn.com/mcp"
}
}
}浏览器会先询问是否打开应用,然后应用会显示设置并请你确认。密钥的值会留空,由你自己填写。
ChatGPT 只能连接互联网上的服务器:
https://mcp.abstraxn.com/mcp菜单名称可能因套餐和版本不同而略有差异。
你的选择通过 Cookie 保存在这台设备上,无需账户。
这些设置是根据作者在注册中心的条目生成的。如果 README 的写法不同,请以 README 为准。
我们还没有读取这个服务器的工具列表;我们会轮流检查各个端点。
我们检查的是任何人都能看到的信息;我们没有阅读代码。不适用的检查项不计入总数。 · 检查于 2026年11月8日
发布者(sandeep-antier)不是仓库所有者(Abstraxn-Labs);可能是其他人代为上架的
我们还没有从 GitHub 读取这个仓库
我们还没有从 GitHub 读取这个仓库
尚未检查;我们会轮流检查各个端点
尚未检查;我们会轮流检查各个端点
尚未检查;我们会在检查端点时读取工具列表
与注册中心里这个分类中所有活跃的服务器比较。只有当发布者拥有该仓库时,星标数才计入。
它在 1 项适用的基础检查中通过了 0 项。我们没有阅读代码。在添加密钥或令牌之前,请先看看这个服务器要求哪些权限,并使用只具备所需权限的密钥。
注册中心没有列出必需的密钥,不过有些服务器会在首次使用时要求你登录。
它在作者的云端运行。通过互联网连接,无需安装,但你发送的内容会经过作者的服务器。
GitHub 仓库最后更新于–,最新版本(1.0.0)于3个月前进入注册中心。
支持 MCP 的应用,例如 Claude Desktop、Claude Code、Cursor 和 VS Code。它通过 URL 连接,所以接受远程 MCP 服务器的应用也可以使用,例如开启开发者模式的 ChatGPT。
同一分类中有:SA Crypto Tax Rules, VolatiAI MCP, Actora — Agent Identity, Subscriptions & A2A
同一分类中其他作者的服务器,按星标数排序。
如何看卡片:↓ 每周下载量i★ GitHub 星标i三大支柱:评价 · 检查 · 使用情况i更新 = 最新版本发布到注册中心的时间i
SA crypto tax: FIFO capital gains, tax estimates, CGT exclusion, capital vs revenue, CARF
ERC-8004 agent identity, on-chain subscriptions, reputation, A2A tasks and chat over 53 tools.
按原文从作者的仓库复制。PopNx MCP 没有审查或背书其内容。HTML、图片和脚本已被移除。链接会离开本站。
A free, public [MCP](https://modelcontextprotocol.io) (Model Context Protocol) server for Web3 data. Point any MCP client — Claude Desktop, Cursor, your own agent — at it and it can read live chain data (block height, gas, transaction status, ERC-20 info, spot prices), look up weather forecasts, build unsigned EVM/Solana transfer transactions, and, for a handful of pay-per-call tools, look up market data, wallets/tokens/ENS, travel search, places/solar/aerial-view data, and social-profile identity.
No API key, no account, no signup. Free tools are open to anyone; paid tools are settled directly from the caller's own wallet via the x402 payment protocol — this service never holds or signs funds on your behalf.
Built on the official @modelcontextprotocol/sdk and NestJS 11.
git clone https://github.com/Abstraxn-Labs/abstraxn-agent-layer.git
cd abstraxn-agent-layer npm install cp .env.example .env
npm run start:dev
GET http://localhost:3011/healthPOST http://localhost:3011/mcphttp://localhost:3011/api/docsDatabase migrations run automatically on boot — no separate CLI step needed.
Add this to your MCP client's config (e.g. claude_desktop_config.json or Cursor's mcp.json):
{
"mcpServers": { "abstraxn-public-web3": { "url": "http://localhost:3011/mcp" } } }
Restart the client and the tools below become available to it — no further setup.
| Tool | Paid? | What it does |
|---|---|---|
network.blocknumber | No | Current EVM block number or Solana slot. Query one chain or all at once. |
network.transaction_status | No | Look up a transaction/signature by hash on EVM or Solana. |
network.gas_info | No | Current gas price + EIP-1559 fee hints for an EVM chain. |
network.token_info | No | ERC-20 name / symbol / decimals / total supply. |
network.token_price | No | Spot price via CoinGecko (defaults to ETH/USD). |
network.prepare_transfer | No | Build an unsigned native/ERC-20/SPL transfer transaction from an explicit from/to/amount. Never signs or broadcasts. |
weather.forecast | No | Current conditions, forecast, astronomy, location search, historical, and marine weather lookups, 6 actions. |
market.crypto | Yes | Crypto market-data lookups (CoinGecko-sourced), 6 actions. |
web3.lookup | Yes | Multi-chain wallet / token / ENS / tx-simulation lookups, 7 actions. |
travel.search | Yes | Flight and hotel search, 2 actions. |
places.lookup | Yes | Place / solar / aerial-view lookups, 11 actions. |
social.profile_lookup | Yes | Person / social-profile identity resolution for a batch of records. |
Tools are namespaced by area (network.*, market.*, web3.*, travel.*, places.*, social.*) so an MCP client can browse them as a tree rather than a flat list.
How paid tools work: call one with no payment, and you get back a paymentRequired challenge (not an error). Your wallet client signs it and retries the same call with paymentPayload set — your wallet pays directly; this service only relays the request.
Most people will use an MCP client (above), but the endpoint is plain JSON-RPC over HTTP if you want to script against it directly:
BASE=http://localhost:3011
ACCEPT='Accept: application/json, text/event-stream' # required by the MCP spec
curl -s -X POST "$BASE/mcp" -H 'Content-Type: application/json' -H "$ACCEPT" \ -d '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2025-06-18","capabilities":{},"clientInfo":{"name":"my-client","version":"1.0"}}}'
curl -s -X POST "$BASE/mcp" -H 'Content-Type: application/json' -H "$ACCEPT" \ -d '{"jsonrpc":"2.0","id":2,"method":"tools/list"}'
curl -s -X POST "$BASE/mcp" -H 'Content-Type: application/json' -H "$ACCEPT" \ -d '{"jsonrpc":"2.0","id":3,"method":"tools/call","params":{"name":"network.token_price","arguments":{"symbol":"bitcoin"}}}'
GET /mcp returns 405 by design — every call is stateless, so there's no session to resume.
Copy .env.example to .env. Everything has a safe default except the one marked required:
| Variable | Required | Description |
|---|---|---|
PORT | No | HTTP port (default 3011) |
POSTGRES_HOST / PORT / USER / PASSWORD / DB | No | Postgres connection, used only for abuse tracking |
PUBLIC_MCP_RATE_LIMIT_PER_MIN / _WINDOW_MS | No | Global per-IP rate limit (default 30/min) |
CHAIN_RPC_* | No | Per-chain EVM RPC overrides — public defaults are used if unset (see src/mcp/utils/chain-registry.util.ts) |
SOLANA_RPC_URL / SOLANA_DEVNET_RPC_URL | No | Solana cluster RPC overrides |
WEATHERAPI_KEY | Yes | Free API key for weather.forecast — get one at WeatherAPI.com's signup page (100K calls/month free tier, no paid features used). Without it, weather.forecast returns a clear error instead of failing the whole service. |
WEATHERAPI_BASE_URL | Yes | Upstream base URL for weather.forecast — no default is committed to source, so the tool fails cleanly until this is set (ships as https://api.weatherapi.com/v1 in .env.example; override to point at a mock/self-hosted mirror for local testing). |
UPSTREAM_RELAY_BASE_URL | Yes | Base URL for the upstream relay behind market.crypto / web3.lookup / travel.search — no default is committed, so those 3 tools fail until this is set |
ENRICHMENT_RELAY_BASE_URL | Yes | Base URL for the upstream relay behind places.lookup / social.profile_lookup — a separate upstream from UPSTREAM_RELAY_BASE_URL, no default is committed |
MCP client (Claude Desktop, Cursor, your agent)
→ POST /mcp (this service, stateless — a fresh McpServer per request) → free tools: direct chain RPC / CoinGecko calls → paid tools: relayed upstream, settled by the caller's wallet via x402
This is a single, standalone deployable — it doesn't share a workspace or database with any other Abstraxn service. That's deliberate: several MCP registries expect a public MCP server to live in its own repo with one route and one fixed tool set, reviewable end to end.
Stack: Node.js 20+ · NestJS 11 · @modelcontextprotocol/sdk ^1.30.0 (official SDK) · PostgreSQL + TypeORM · @x402/core · viem (EVM) + raw JSON-RPC (Solana reads) · @solana/web3.js + @solana/spl-token (Solana transfer building) · @skalenetwork/bite (SKALE privacy-encrypted transfers) · helmet, @nestjs/throttler
Postgres is used for abuse tracking only — no tenant, policy, or config tables exist:
| Table | Purpose |
|---|---|
observed_ips | One row per caller IP, with a running call count and last-seen time. |
observed_wallets | One row per wallet address seen paying via x402. |
public_mcp_transactions | Append-only history of completed paid calls. |
If Postgres is unreachable, a call still succeeds — tracking writes are best-effort and never block or fail a real MCP request.
Since anyone can call this service with no key, a few invariants matter:
app.set('trust proxy', ...) in main.ts, or the limiter ends up rate-limiting the proxy instead of real callers.weather.forecast builds its provider request URL with the key as a query param, but every log line only ever carries the action name and error message, never the URL itself.Found a security issue? See CONTRIBUTING.md before opening a public issue.
| Script | Description |
|---|---|
npm run start:dev | Run in watch mode |
npm run build | Compile to dist/ |
npm run start:prod | Run the compiled build (dist/main) |
npm run lint | ESLint |
npm test | Jest — unit, SDK-level integration, and HTTP smoke tests |
Issues and PRs are welcome — see CONTRIBUTING.md for how to add a new tool and the project's definition of done.
License: MIT