NEARWEEK/MCP
If you are the rightful owner of MCP and would like to certify it and/or have it hosted online, please leave a comment on the right or send an email to dayong@mcphub.com.
The NEARWEEK MCP Server is a Model Context Protocol server designed to facilitate access to NEAR blockchain data, providing tools and resources for querying accounts, blocks, contracts, and transactions on the NEAR Protocol.
NEARWEEK MCP Server
Model Context Protocol (MCP) server for accessing NEAR blockchain data. Provides tools and resources for querying accounts, blocks, contracts, and transactions on NEAR Protocol.
Related Repositories
- MCP Backend API - Authentication backend service for API key management
Features
Tools
-
Block Operations
near.getBlock- Get block details by hash, height, or finalitynear.getBlockChanges- Get all state changes in a blocknear.getChunk- Get chunk details
-
Account Operations
near.getAccount- View account details (balance, storage, etc.)near.getAccountChanges- View account state changesnear.getAccessKeys- List all access keys for an accountnear.getAccessKey- View specific access key details
-
Contract & Transaction Operations
near.viewFunction- Call read-only contract view methodsnear.getTransaction- Get transaction status with receiptsnear.rpc- Make generic NEAR RPC calls
Resources
Static Resources:
near://blocks/latest?count=N- Recent blocks feednear://network/status- Network status and protocol info
Resource Templates (parameterized):
near://account/{account_id}- Account summary cardnear://contract/{account_id}/readme- Contract info and suggested methods
Installation
npm install
npm run build
Usage
Running the Server
The server supports two transport modes: stdio (default) and HTTP.
Stdio Mode (for MCP clients like Claude Desktop)
# Mainnet (default)
npm start
# Testnet
NEAR_NETWORK=testnet npm start
# or
npm start testnet
HTTP Mode (for web-based clients)
# Mainnet on port 3000 (default)
npm start -- --http
# Testnet on custom port
npm start testnet --http --port=8080
# Using npm scripts
npm run start:http
npm run start:streamableHttp # Explicit alias for Streamable HTTP transport
# With environment variables
PORT=8080 NEAR_NETWORK=testnet npm start -- --http
The HTTP server provides:
- MCP endpoint:
http://localhost:3000/mcp(GET/POST/DELETE) - Streamable HTTP transport with session management (requires authentication) - RPC endpoint:
http://localhost:3000/rpc(POST) - Simple JSON-RPC for direct requests (requires authentication) - Health check:
http://localhost:3000/health(GET) - No authentication required
Authentication
The MCP server requires API key authentication for all operations (both stdio and HTTP modes). Authentication is managed by the MCP Backend API service.
Prerequisites
- Start the MCP Backend API:
cd ../mcp-backend-api
npm install
npm run build
npm start
The MCP Backend API runs on port 3001 by default. See ../mcp-backend-api/README.md for details.
- Generate an API Key:
cd ../mcp-backend-api
npm run generate:key -- --name="My MCP Client"
Save the generated API key securely - it will be needed for both stdio and HTTP modes.
Stdio Mode Authentication
API key must be provided via the MCP_API_KEY or API_KEY environment variable:
# Set the API key
export MCP_API_KEY=your-generated-api-key-here
# Optional: Set MCP Backend API URL (default: http://localhost:3001)
export AUTH_BACKEND_URL=http://localhost:3001
# Start the server
npm start
The server will validate the API key on startup and exit if invalid.
HTTP Mode Authentication
API key can be provided in two ways:
Option 1: Authorization Header (Recommended)
# Start the server
npm start -- --http
# Make authenticated requests with Authorization header
curl -X POST http://localhost:3000/mcp \
-H "Authorization: Bearer your-generated-api-key-here" \
-H "Content-Type: application/json" \
-d '{"jsonrpc":"2.0","method":"tools/list","id":1}'
Option 2: Query Parameter
# Make authenticated requests with query parameter
curl -X POST "http://localhost:3000/mcp?apiKey=your-generated-api-key-here" \
-H "Content-Type: application/json" \
-d '{"jsonrpc":"2.0","method":"tools/list","id":1}'
⚠️ Security Note: Query parameters appear in server logs and browser history. The Authorization header is more secure for production use.
Both /mcp and /rpc endpoints support both authentication methods.
Configuration
Configure the server via environment variables or CLI arguments:
MCP Server Configuration
- Network:
NEAR_NETWORK=mainnet|testnetor CLI argtestnet - Transport: CLI flag
--httpor-hfor HTTP mode (default: stdio) - Port:
PORT=3000or CLI arg--port=8080(HTTP mode only) - RPC URL:
NEAR_RPC_URLorRPC_URL(overrides default network endpoint) - NEAR API Key:
NEAR_API_KEY(for authenticated NEAR RPC providers like FastNEAR)
Authentication Configuration
- MCP API Key:
MCP_API_KEYorAPI_KEY(required for stdio mode authentication) - MCP Backend API URL:
AUTH_BACKEND_URL(default:http://localhost:3001)
Logging Configuration
The MCP server uses a two-tier logging approach (HTTP mode only):
- Access Logs - HTTP request/response logging via morgan
- Structured Logs - Application logging via Pino
Configuration:
- Log Level:
LOG_LEVEL- Set minimum log level for structured logs (default:info) - Access Log Format:
ACCESS_LOG_FORMAT- Set format for HTTP access logs - Node Environment:
NODE_ENV- Set toproductionfor JSON logs, otherwise pretty-printed
Access Logs (morgan)
HTTP access logs are always enabled in HTTP mode and written to stdout, independent of the LOG_LEVEL setting. These provide one-line summaries of each HTTP request.
Configuration:
- Set format via
ACCESS_LOG_FORMATenvironment variable - Default:
[:date[iso]] :method :url :status :response-time ms - :res[content-length]
Common format tokens:
:date[iso]- ISO 8601 timestamp:method- HTTP method (GET, POST, etc.):url- Request URL:status- HTTP status code:response-time- Response time in milliseconds:res[content-length]- Response size in bytes:remote-addr- Client IP address
Example access log output:
[2025-01-09T14:30:15.123Z] POST /rpc 200 12.456 ms - 345
[2025-01-09T14:30:20.789Z] GET /health 200 1.234 ms - 78
[2025-01-09T14:30:25.456Z] POST /mcp 403 5.678 ms - 62
For more format tokens, see morgan documentation.
Structured Logs (Pino)
Application logs for startup messages, errors, and debug information. Controlled by LOG_LEVEL environment variable.
Log Levels:
fatal(60) - Fatal errors that cause application termination (includes stack traces)error(50) - Error conditions (includes stack traces for 5xx errors)warn(40) - Warning conditionsinfo(30) - Informational messages (default)debug(20) - Debug messagestrace(10) - Trace messages (very verbose, includes HTTP req/res details)
Example:
# Show only warnings and errors
LOG_LEVEL=warn npm start
# Debug mode for development
LOG_LEVEL=debug npm start
# Trace level (includes detailed HTTP request logging)
LOG_LEVEL=trace npm start
# Production mode with JSON logs
NODE_ENV=production npm start
HTTP Request Logging Behavior:
- Normal requests (2xx, 3xx): Only logged to access log
- Client errors (4xx): Only logged to access log
- Server errors (5xx): Logged to access log + error level in structured log
- Trace level: All requests logged to structured log with req/res details
Development mode (NODE_ENV != production):
[14:30:15.123] INFO: NEARWEEK MCP Server running on mainnet (HTTP mode)
[14:30:30.123] ERROR: POST /rpc 500
[14:30:35.456] TRACE: POST /health 200
method: "POST"
url: "/health"
statusCode: 200
responseTime: 12
Production mode (NODE_ENV=production):
{"level":30,"time":1673270415123,"msg":"NEARWEEK MCP Server running on mainnet (HTTP mode)"}
{"level":50,"time":1673270430123,"msg":"POST /rpc 500"}
{"level":10,"time":1673270435456,"method":"POST","url":"/health","statusCode":200,"responseTime":12,"msg":"POST /health 200"}
Log Separation:
- Access logs: All HTTP requests (always on in HTTP mode)
- Structured logs: Application messages, errors, and (at trace level) HTTP details
- At
tracelevel: Both access logs and structured logs include HTTP request details
Note: Stdio mode only has structured logs (no HTTP access logs), and they're written to stderr to avoid interfering with the MCP protocol on stdout.
Using Custom RPC Providers
To use alternative RPC providers like FastNEAR with API key authentication:
# With API key
NEAR_RPC_URL="https://rpc.mainnet.fastnear.com" \
NEAR_API_KEY="your-api-key-here" \
npm start
# Custom RPC without API key
NEAR_RPC_URL="https://your-custom-rpc.com" npm start
Development
# Install dependencies
npm install
# Build TypeScript
npm run build
# Watch mode
npm run dev
# Type checking
npm run typecheck
MCP Client Configuration
Stdio Transport (Claude Desktop, VS Code, etc.)
Add to your MCP client configuration with your API key:
{
"mcpServers": {
"near": {
"command": "node",
"args": ["/path/to/nearweek/src/MCP/dist/index.js", "mainnet"],
"env": {
"NEAR_NETWORK": "mainnet",
"MCP_API_KEY": "your-generated-api-key-here",
"AUTH_BACKEND_URL": "http://localhost:3001"
}
}
}
}
Important: Replace your-generated-api-key-here with an actual API key generated using the MCP Backend API's CLI tool.
HTTP Transport (Web-based clients)
Start the server in HTTP mode and connect to:
- Base URL:
http://localhost:3000 - MCP Endpoint:
http://localhost:3000/mcp- Full MCP protocol with Streamable HTTP transport- Supports GET (SSE streams), POST (JSON-RPC messages), DELETE (session termination)
- Includes session management with
Mcp-Session-Idheaders - Complies with MCP specification 2025-03-26
- RPC Endpoint:
http://localhost:3000/rpc- Simple JSON-RPC endpoint for non-MCP clients
Using the MCP endpoint (for MCP clients)
MCP clients should use the /mcp endpoint with proper protocol headers. The server manages sessions automatically.
With Authorization Header:
# Example authenticated MCP request
curl -X POST http://localhost:3000/mcp \
-H "Authorization: Bearer your-generated-api-key-here" \
-H "Content-Type: application/json" \
-d '{"jsonrpc":"2.0","method":"initialize","params":{},"id":1}'
With Query Parameter:
# Example using query parameter
curl -X POST "http://localhost:3000/mcp?apiKey=your-generated-api-key-here" \
-H "Content-Type: application/json" \
-d '{"jsonrpc":"2.0","method":"initialize","params":{},"id":1}'
Using the RPC endpoint (for simple HTTP clients)
For direct JSON-RPC requests without MCP protocol overhead (still requires authentication):
With Authorization Header:
# List available tools
curl -X POST http://localhost:3000/rpc \
-H "Authorization: Bearer your-generated-api-key-here" \
-H "Content-Type: application/json" \
-d '{"jsonrpc": "2.0", "method": "tools/list", "id": 1}'
# Call a tool
curl -X POST http://localhost:3000/rpc \
-H "Authorization: Bearer your-generated-api-key-here" \
-H "Content-Type: application/json" \
-d '{
"jsonrpc": "2.0",
"method": "tools/call",
"params": {
"name": "near.getBlock",
"arguments": {"finality": "final"}
},
"id": 2
}'
With Query Parameter:
# List available tools
curl -X POST "http://localhost:3000/rpc?apiKey=your-generated-api-key-here" \
-H "Content-Type: application/json" \
-d '{"jsonrpc": "2.0", "method": "tools/list", "id": 1}'
# Call a tool
curl -X POST "http://localhost:3000/rpc?apiKey=your-generated-api-key-here" \
-H "Content-Type: application/json" \
-d '{
"jsonrpc": "2.0",
"method": "tools/call",
"params": {
"name": "near.getBlock",
"arguments": {"finality": "final"}
},
"id": 2
}'
Public Server
A public instance of this MCP server is available at https://mcp.nearweek.com/mcp for immediate use without local installation.
Connecting Popular MCP Clients
To use the public server, you'll need an API key. Contact the service administrator or visit the authentication backend to obtain one.
Claude Code
Add the server using the Claude Code CLI:
Option 1: Using Authorization Header (Recommended)
claude mcp add --transport http nearweek https://mcp.nearweek.com/mcp \
--header "Authorization: Bearer Your_API_key"
Option 2: Using Query Parameter
claude mcp add --transport http nearweek "https://mcp.nearweek.com/mcp?apiKey=Your_API_key"
⚠️ Security Note: Replace Your_API_key with your actual API key. The Authorization header method is more secure for production use.
Visual Studio Code
Add to your VS Code MCP settings (.vscode/mcp.json or user settings):
{
"mcpServers": {
"nearweek": {
"transport": "http",
"url": "https://mcp.nearweek.com/mcp",
"headers": {
"Authorization": "Bearer Your_API_key"
}
}
}
}
MCP Inspector
- Start the inspector:
npx @modelcontextprotocol/inspector
-
In your browser, configure the connection on the left side:
- Transport Type:
Streamable HTTP - URL:
https://mcp.nearweek.com/mcp
- Transport Type:
-
Open the Authentication dialog, switch to JSON mode, and paste in the Custom Headers (JSON) field:
{
"Authorization": "Bearer Your_API_key"
}
Requirements
- Node.js 22 or higher
- TypeScript 5.7+
Architecture
- Runtime: Node.js 22+ with ES2022 modules
- Transport:
- MCP stdio transport for desktop clients
- Streamable HTTP transport (MCP 2025-03-26 spec) for web clients
- Session management with cryptographically secure UUIDs
- NEAR SDK: near-api-js v5+ official JavaScript SDK
- RPC: NEAR JSON RPC via JsonRpcProvider with optional API key authentication
- Validation: Zod schemas for all inputs
- HTTP Server: Express.js with dual endpoints:
/mcp- Full MCP protocol with Streamable HTTP transport/rpc- Simple JSON-RPC for non-MCP clients
License
This project is licensed under the .