Skip to main content
Glama
README.md
<div align="center">
  <img src="./assets/Abstract_MCP.jpg" alt="Abstract MCP Logo">
  
  # Society Abstract MCP
  
  **FastMCP TypeScript server providing comprehensive wallet, token and smart contract utilities for Abstract Testnet/Mainnet**

  ![Abstract](./assets/logo.jpg)

  ![TypeScript](https://img.shields.io/badge/TypeScript-007ACC?style=for-the-badge&logo=typescript&logoColor=white)
  ![FastMCP](https://img.shields.io/badge/FastMCP-FF6B6B?style=for-the-badge)
  
</div>

---

## ๐Ÿ› ๏ธ Available Tools

### **1. `ab_get_balance` - Balance Checker**
Get native ETH or ERC-20 token balance for any address with ENS support.

**Parameters:**
- `address` (required): Wallet address or ENS name to check balance for
- `tokenAddress` (optional): ERC-20 contract address for token balance
- `tokenSymbol` (optional): Token symbol (e.g., "USDC") for well-known tokens

**Example Usage:**
```typescript
// Get native ETH balance
{ address: "0x1234...abcd" }

// Get ERC-20 balance by contract
{ address: "vitalik.eth", tokenAddress: "0xA0b86a33E6F..." }

// Get balance by token symbol
{ address: "0x1234...abcd", tokenSymbol: "USDC" }
```

**Returns:** Human-readable balance as string (e.g., "1.234567")

---

### **2. `ab_transfer_token` - Token Transfer**
Transfer native ETH or ERC-20 tokens to another address with ENS support.

**Parameters:**
- `to` (required): Recipient address or ENS name
- `amount` (required): Amount to transfer in human-readable format
- `tokenAddress` (optional): ERC-20 contract address for token transfers
- `tokenSymbol` (optional): Token symbol for well-known tokens

**Example Usage:**
```typescript
// Transfer native ETH
{ to: "0x1234...abcd", amount: "0.1" }

// Transfer ERC-20 by contract
{ to: "vitalik.eth", amount: "100", tokenAddress: "0xA0b86a33E6F..." }

// Transfer by token symbol
{ to: "0x1234...abcd", amount: "50", tokenSymbol: "USDC" }
```

**Returns:** Transaction hash of the successful transfer

---

### **3. `ab_deploy_token_erc20` - ERC-20 Token Deployment**
Deploy a new ERC-20 BasicToken contract to Abstract network.

**Parameters:**
- `name` (required): Token name (e.g., "DemoToken")
- `symbol` (required): Token symbol/ticker (e.g., "DMT")
- `initialSupply` (required): Total supply in wei (18 decimals) as string

**Example Usage:**
```typescript
// Deploy 1000 tokens (1000 * 10^18 wei)
{
  name: "MyToken",
  symbol: "MTK",
  initialSupply: "1000000000000000000000"
}
```

**Returns:** Deployed contract address and deployment details

---

### **4. `ab_agw_create_wallet` - Abstract Global Wallet Creation**
Deploy a new Abstract Global Wallet (smart contract account) for a given signer.

**Parameters:**
- `signer` (optional): EOA signer address or ENS name. If omitted, uses server wallet as initial signer

**Example Usage:**
```typescript
// Create AGW with specific signer
{ signer: "0x1234...abcd" }

// Create AGW with server wallet as signer
{ }
```

**Returns:** Smart account address and deployment transaction hash

---

### **5. `ab_generate_wallet` - EOA Wallet Generation**
Generate a brand-new Externally Owned Account (EOA) with private key and address.

**Parameters:**
- `random_string` (required): Any string for entropy (can be anything)

**Example Usage:**
```typescript
{ random_string: "my-random-seed" }
```

**Returns:** 
- `privateKey`: 0x-prefixed 32-byte hex string
- `address`: Checksummed Ethereum/Abstract address

**โš ๏ธ Security Note:** Store the private key securely and never log it.

---

## ๐Ÿš€ Quick Start

### For MCP Client Integration

#### Using NPX (Recommended)
```jsonc
{
  "mcpServers": {
    "society-abstract-mcp": {
      "command": "npx",
      "args": ["-y", "society-abstract-mcp@0.1.4"],
      "env": {
        "ABSTRACT_PRIVATE_KEY": "your-private-key-here",
        "ABSTRACT_RPC_URL": "https://api.testnet.abs.xyz",
        "TESTNET": "true",
        "PORT": "3101",
        "MCP_DISABLE_PINGS": "true"
      }
    }
  }
}
```

#### Using Local Build
```jsonc
{
  "mcpServers": {
    "society-abstract-mcp-local": {
      "command": "node",
      "args": ["/path/to/your/society_abstract_mcp/dist/server.js"],
      "env": {
        "ABSTRACT_PRIVATE_KEY": "your-private-key-here",
        "ABSTRACT_RPC_URL": "https://api.testnet.abs.xyz",
        "TESTNET": "true",
        "PORT": "3101",
        "MCP_DISABLE_PINGS": "true"
      }
    }
  }
}
```

### For Development

```bash
# 1. Install dependencies
npm install

# 2. Build the project
npm run build

# 3. Run development server
npm run dev

# 4. Run tests
npm run test

# 5. Run integration tests (requires funds)
INTEGRATION=1 npm run test:int
```

---

## ๐Ÿ“‹ Environment Variables

**Required for MCP Client:**
- `ABSTRACT_PRIVATE_KEY`: EOA private key that pays gas fees
- `ABSTRACT_RPC_URL`: Abstract network RPC URL
- `TESTNET`: "true" for testnet, "false" for mainnet

**Optional for MCP Client:**
- `PORT`: HTTP port for the MCP server (default: 3101)
- `MCP_DISABLE_PINGS`: "true" to disable ping messages

> **Note:** No .env file needed for production. All variables should be passed by the MCP client.

---

## ๐Ÿ—๏ธ Build & Deploy

```bash
# Build for production
npm run build

# Start production server
npm start

# Build outputs to dist/ with:
# - ESM modules
# - TypeScript definitions
# - Copied JavaScript assets
```

---

## ๐Ÿงช Testing

- **Unit Tests**: `npm run test` (mocked, no gas required)
- **Integration Tests**: `INTEGRATION=1 npm run test:int` (requires testnet funds)
- **Balance Checker**: `npm run balance` (multi-network balance tool)

---

## ๐Ÿ“– Technical Details

- **Framework**: FastMCP with TypeScript
- **Networks**: Abstract Testnet/Mainnet
- **Standards**: ERC-20 tokens, Abstract Global Wallets
- **Dependencies**: viem, zksync-ethers, @abstract-foundation/agw-client
- **Build Target**: ES2022 (Node.js โ‰ฅ 16.14)

---

## ๐Ÿค Contributing

1. Fork the repository
2. Create your feature branch (`git checkout -b feature/amazing-feature`)
3. Commit your changes (`git commit -m 'Add amazing feature'`)
4. Push to the branch (`git push origin feature/amazing-feature`)
5. Open a Pull Request

---

## ๐Ÿ“„ License

This project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details.

---

## ๐Ÿ†˜ Support

- **Issues**: [GitHub Issues](https://github.com/wearesociety/abstract_MCP/issues)
- **Documentation**: This README and inline code documentation
- **Community**: Join our [Telegram](https://t.me/societyportal)

---

<div align="center">
  <b>Built with โค๏ธ by the Society Team</b>
</div>

TDQS

A4.3/5.0

Scored across 5 tools

Disambiguation5/5

Each tool has a clearly distinct purpose: creating a smart-contract wallet, deploying an ERC-20 token, generating an EOA wallet, fetching balances, and transferring tokens. There is no overlap in functionality, and the descriptions clearly differentiate their roles in the blockchain interaction workflow.

Naming Consistency5/5

All tools follow a consistent 'ab_' prefix with descriptive verb_noun patterns (e.g., create_wallet, deploy_token, generate_wallet, get_balance, transfer_token). This uniformity makes the toolset predictable and easy to navigate, with no deviations in naming conventions.

Tool Count5/5

With 5 tools, the set is well-scoped for interacting with the Abstract network, covering key operations like wallet management, token deployment, balance queries, and transfers. Each tool serves a distinct and necessary function without being overly sparse or bloated.

Completeness4/5

The toolset provides comprehensive coverage for core blockchain interactions, including creation, deployment, querying, and transferring. A minor gap exists in lacking update or delete operations for deployed contracts or wallets, but agents can work around this as these are less common in typical workflows.

Maintenance

ActivityInactive
ResponsivenessNo issues