@402md/agent-tools
v0.1.1
Published
Agent tools for 402.md — framework-agnostic + LangChain adapter
Maintainers
Readme
@402md/agent-tools
Ready-made tools for AI agents to discover and pay for 402.md skills. Framework-agnostic core with a LangChain adapter.
Note: LangChain is currently the only supported framework adapter. Support for Vercel AI SDK, CrewAI, and others is planned. The framework-agnostic core (
ToolDef) can be used to build custom adapters for any framework.
Install
npm install @402md/agent-tools @402md/cliFor LangChain:
npm install @402md/agent-tools @402md/cli @langchain/coreQuick Start
Initialize your project with one of the two payment modes:
Wallet-pay — uses a managed wallet created on the 402.md dashboard. The backend handles gas and signing on your behalf (recommended for getting started):
npx @402md/cli init \
--mode wallet-pay \
--api-key sk_your_api_key \
--wallet 0xYOUR_WALLET_ADDRESS \
--network base-sepoliax402 — self-custody mode. You provide your own private key and the agent signs USDC transfers directly on-chain:
npx @402md/cli init \
--mode x402 \
--key 0xYOUR_PRIVATE_KEY \
--network baseTo point at a custom backend (e.g. local development):
npx @402md/cli init \
--mode wallet-pay \
--api-key sk_your_api_key \
--wallet 0xYOUR_WALLET_ADDRESS \
--network base-sepolia \
--api-url http://localhost:3001Then install a skill:
npx @402md/cli add <skill_name>import { ChatAnthropic } from '@langchain/anthropic'
import { createAgent } from 'langchain'
import { HumanMessage } from '@langchain/core/messages'
import { createAll402Tools } from '@402md/agent-tools/langchain'
import type { StructuredToolInterface } from '@langchain/core/tools'
const paymentTools = createAll402Tools() as StructuredToolInterface[]
const agent = createAgent({
model: new ChatAnthropic({ model: 'claude-sonnet-4-6' }),
tools: paymentTools,
systemPrompt: 'You are an AI agent with a USDC wallet on Base.',
})
const result = await agent.invoke({
messages: [new HumanMessage('Check my balance and call ditto at /test')],
})API
LangChain (@402md/agent-tools/langchain)
import {
create402Tools, // 2 core tools: balance, call
create402SearchTool, // 1 tool: search (opt-in)
createToolsFromInstalledSkills, // 1 tool per installed skill
createAll402Tools, // all combined (core + search + skills)
} from '@402md/agent-tools/langchain'All functions return DynamicStructuredTool[] and accept an optional { projectDir?: string }.
Framework-Agnostic (@402md/agent-tools)
import { createCoreTools, createSearchTool, createSkillTools } from '@402md/agent-tools'
// Core tools (balance + call)
const tools = [...createCoreTools(), ...createSkillTools()]
// Add search if needed
const allTools = [...createSearchTool(), ...tools]
// Each tool: { name, description, schema, execute }
const result = await tools[0].execute({ query: 'sentiment' })Tools
| Tool | Source | Description |
|------|--------|-------------|
| check_balance | create402Tools | Check USDC wallet balance |
| call_skill | create402Tools | Call any skill with automatic payment |
| search_skills | create402SearchTool | Search the 402.md marketplace (opt-in) |
| <skill-name> | createToolsFromInstalledSkills | One tool per installed skill (auto-generated) |
Error Handling
Tools never throw. If payment isn't configured, they return:
{ "error": "No payment configured. Run:\n npx @402md/cli init ..." }Examples
See the examples repo for complete working demos, including an interactive LangChain agent with autonomous payments.
License
MIT
