TPMJS Platform Guide
Complete guide to user accounts, collections, agents, forking, and API keys on TPMJS.
Introduction
TPMJS is more than a tool registry—it's a platform for building, sharing, and deploying AI-powered workflows. This guide covers the key platform features that let you organize tools, create AI agents, and share your work.
User Accounts
Create a profile with a unique username to own collections, agents, and access protected features
Collections
Group tools into curated sets that can be shared and connected to MCP clients like Claude Desktop
Agents
Build custom AI assistants with multi-provider support, tool integration, and persistent conversations
Forking
Clone public agents and collections to customize them for your own use
API Keys
Programmatic access to the platform with scoped permissions and rate limiting
Usage Tracking
Monitor API usage, token consumption, and costs across your agents and collections
Getting Started
Follow these steps to get started with the TPMJS platform features.
Create an Account
Sign up at tpmjs.com/sign-up with email. You'll need to verify your email address.
Set Up Your Profile
Choose a unique username. This will be used in your public URLs (e.g., tpmjs.com/your-username).
Generate an API Key
Go to Dashboard → Settings → API Keys to create an API key for MCP connections and programmatic access.
Create Your First Collection
Go to Dashboard → Collections and create a collection to group related tools together.
User Accounts Overview
A TPMJS account gives you ownership and control over collections, agents, and API keys. Your account includes a public profile that showcases your public work.
Authentication
Email/password authentication with email verification. Sessions last 7 days.
Data Ownership
You own all your collections, agents, API keys, and conversation history.
Account Features
- Collections - Create up to 50 collections to organize tools
- Agents - Create up to 20 AI agents with custom configurations
- API Keys - Generate up to 10 API keys for programmatic access
- Provider Keys - Store encrypted API keys for LLM providers (OpenAI, Anthropic, etc.)
- Activity Feed - Track your actions with a complete audit trail
- Usage Analytics - Monitor API calls, tokens, and costs
Usernames & Profiles
Your username is a unique identifier that becomes part of your public URLs. Choose carefully—it's how others will find and reference your work.
Username Requirements
- 3-30 characters long
- Lowercase letters, numbers, and hyphens only
- Must start and end with a letter or number (not hyphen)
- Must be unique across all TPMJS users
Valid usernames:
- ajax
- john-doe
- dev123
- my-cool-name
Invalid usernames:
- -invalid (starts with hyphen)
- also-invalid- (ends with hyphen)
- Hi (uppercase not allowed)
- ab (too short, minimum 3 chars)Reserved Names
Certain names are reserved and cannot be used as usernames:
Checking Availability
When setting up your profile, usernames are checked in real-time for availability. You can also check programmatically:
curl https://tpmjs.com/api/user/username/check?username=your-usernamePublic Pages
Your public profile displays your name, avatar, and all public agents and collections. Others can view your work and fork items they find useful.
Profile URL
tpmjs.com/{username}Your public profile showing all public agents and collections
tpmjs.com/@{username}Alternative social-media style URL (works identically)
Public vs Private
Public Items
- • Visible on your profile page
- • Anyone can view details
- • Can be forked by others
- • Shows in search results
Private Items
- • Only visible to you
- • Not shown on profile
- • Cannot be forked
- • Direct URL returns 404
Collections Overview
Collections are curated groups of tools that you can share and connect to MCP clients. Think of them as playlists for AI tools—bundle related tools together for specific use cases.
Organize
Group related tools together for web scraping, content creation, data analysis, or any workflow
Connect
Each collection gets unique MCP URLs for Claude Desktop, Cursor, and other MCP clients
Share
Make collections public so others can fork them and build on your work
Collection Features
- Tool Grouping - Add up to 100 tools per collection
- Custom Ordering - Arrange tools in your preferred order
- Tool Notes - Add notes explaining why each tool is included
- Environment Variables - Store API keys that are passed to tools at runtime
- MCP Integration - Connect to Claude Desktop with a single URL
- AI Use Cases - Auto-generate workflow suggestions
Creating Collections
Create a collection from your dashboard to start organizing tools.
Collection Fields
| Parameter | Type | Required | Description |
|---|---|---|---|
| Name | string | Yes | Display name for your collection (max 100 chars) |
| Slug | string | No | URL-friendly identifier (auto-generated from name). Used in MCP URLs. |
| Description | string | No | Brief description of the collection purpose (max 500 chars) |
| Public | boolean | No | Whether the collection is visible to others. Default: false (private) |
Steps to Create
1. Go to Dashboard → Collections
2. Click "Create Collection"
3. Enter a name and optional description
4. Click "Create" to save
5. Add tools from the registry using the "Add Tool" button
Adding Tools to Collections
After creating a collection, add tools from the TPMJS registry to build your toolkit.
Adding Tools
From your collection's detail page, use the "Add Tool" button to search the registry. You can search by name, description, or category.
Tool Notes
Add notes to each tool explaining why it's in the collection or how to use it. Notes are visible to anyone viewing the collection and help provide context.
Example Note: "Use this tool first to scrape the webpage, then pass the result to the summarization tool."
Reordering Tools
Tools are presented to AI models in the order they appear in your collection. You can drag and drop to reorder tools based on your preferred workflow.
MCP Integration
The Model Context Protocol (MCP) allows AI assistants to connect directly to your collections. Each collection gets unique MCP URLs that work with Claude Desktop, Cursor, and other MCP clients.
MCP Server URLs
Each collection provides two transport options:
HTTP Transporthttps://tpmjs.com/api/mcp/{username}/{collection-slug}/httpSSE Transporthttps://tpmjs.com/api/mcp/{username}/{collection-slug}/sseClaude Desktop Configuration
Add your collection to Claude Desktop's configuration file:
{
"mcpServers": {
"tpmjs-my-collection": {
"command": "npx",
"args": [
"mcp-remote",
"https://tpmjs.com/api/mcp/YOUR_USERNAME/YOUR_COLLECTION_SLUG/http",
"--header",
"Authorization: Bearer YOUR_TPMJS_API_KEY"
]
}
}
}Config file location:
- macOS:
~/Library/Application Support/Claude/claude_desktop_config.json - Windows:
%APPDATA%\Claude\claude_desktop_config.json
Claude Code CLI
claude mcp add tpmjs-my-collection \
https://tpmjs.com/api/mcp/YOUR_USERNAME/YOUR_COLLECTION_SLUG/http \
-t http -H "Authorization: Bearer YOUR_TPMJS_API_KEY"Collection Environment Variables
Many tools require API keys to function. You can store these as environment variables on your collection, and they'll be passed to tools at runtime.
Adding Environment Variables
1. Open your collection and go to the "Env Vars" tab
2. Click "Add Variable"
3. Enter the variable name (e.g., FIRECRAWL_API_KEY) and value
4. Click "Save"
Security
Encryption: Environment variables are encrypted using AES-256 before storage. They're decrypted only at runtime when tools are executed. Variables are never exposed in API responses.
Common Variables
FIRECRAWL_API_KEYWeb scraping with Firecrawl
EXA_API_KEYWeb search with Exa
TAVILY_API_KEYWeb search with Tavily
BROWSERBASE_API_KEYBrowser automation
Agents Overview
TPMJS Agents are custom AI assistants powered by any LLM provider. Build agents with custom system prompts, attach tools, and have persistent conversations through a streaming API.
Multi-Provider
Support for OpenAI, Anthropic, Google, Groq, and Mistral—bring your own API keys
Tool Integration
Attach individual tools or entire collections to give your agent capabilities
Conversations
Full conversation history with streaming responses and tool call visualization
Note: Agents require LLM provider API keys. You'll need to add your keys in Dashboard → Settings → API Keys before creating agents.
Creating Agents
Create an agent to customize its behavior with a system prompt, choose the AI model, and configure execution parameters.
Basic Configuration
| Parameter | Type | Required | Description |
|---|---|---|---|
| Name | string | Yes | Display name for your agent (max 100 chars) |
| UID | string | No | URL-friendly identifier (auto-generated from name). Used in API calls. |
| Description | string | No | Brief description of what the agent does (max 500 chars) |
| Provider | enum | Yes | LLM provider: OPENAI, ANTHROPIC, GOOGLE, GROQ, or MISTRAL |
| Model | string | Yes | Specific model ID (e.g., gpt-4o, claude-sonnet-4-20250514) |
Advanced Settings
| Parameter | Type | Required | Description |
|---|---|---|---|
| System Prompt | string | No | Instructions that define how the agent behaves (max 10,000 chars) |
| Temperature | number | No | Response randomness (0 = deterministic, 2 = creative). Default: 0.7 |
| Max Tool Calls | number | No | Maximum tool calls per turn (1-100). Default: 20 |
| Context Messages | number | No | Recent messages included in context (1-100). Default: 10 |
Example System Prompt
You are a helpful research assistant specializing in web scraping and data analysis.
When asked to research a topic:
1. Use available web scraping tools to gather information
2. Analyze and synthesize the data
3. Present findings in a clear, structured format
Always cite your sources and be transparent about limitations.Attaching Tools to Agents
Give your agent capabilities by attaching tools from the TPMJS registry. You can attach individual tools or entire collections.
Individual Tools
From your agent's detail page, use the "Add Tool" button to search and attach specific tools. Each tool appears with its name, description, and required environment variables.
Attaching Collections
You can attach entire collections to your agent. When a collection is attached, the agent can use all tools in that collection. This is useful for grouping related tools.
Tip: Collections inherit environment variables from the agent. Set up your API keys once on the agent, and they'll be available to all attached collections and tools.
Tool Limits
- Maximum 50 individual tools per agent
- Maximum 10 collections per agent
- Tools from attached collections don't count against the 50 tool limit
Chat Interface
Interact with your agents through the built-in chat interface with streaming responses and tool call visualization.
Features
Conversation History
Previous conversations appear in the sidebar. Click to resume any conversation.
Streaming Responses
Responses stream in real-time as the AI generates them.
Tool Calls
When the agent uses a tool, you'll see the tool name and can expand to view parameters and results.
Token Usage
Token counts are tracked and displayed for monitoring usage and costs.
Chat URLs
tpmjs.com/{username}/agents/{agent-uid}/chatPublic chat URL for public agents
/dashboard/agents/{id}/chat/{chatId}Dashboard chat URL for your own agents
LLM Providers
TPMJS Agents support multiple AI providers. Each provider offers different models with varying capabilities and pricing.
Anthropic
Get API Key →Claude models known for nuanced understanding
Gemini models with multimodal capabilities
Groq
Get API Key →Ultra-fast inference for open-source models
Mistral
Get API Key →European models with strong multilingual support
Forking Overview
Forking lets you clone public agents and collections to your own account. The forked copy is independent—you can customize it without affecting the original.
Clone & Customize
Start with someone else's configuration and adapt it to your needs
Security First
API keys and sensitive config are never copied—you add your own
What Gets Forked
Included
- • Name and description
- • System prompt (agents)
- • Provider and model settings
- • All attached tools
- • Tool order and notes
- • Temperature and other params
Not Included
- • Environment variables / API keys
- • Executor configuration
- • Conversation history
- • Like count
- • Fork count
Fork Agents
When you find a public agent you like, fork it to your account to customize it.
How to Fork an Agent
1. Navigate to a public agent's detail page (e.g., tpmjs.com/ajax/agents/research-assistant)
2. Click the "Fork" button in the header
3. The agent is copied to your account with all its tools and settings
4. You're redirected to your dashboard to customize the forked agent
5. Add your own API keys to make the agent functional
Fork Button States
Available when viewing a public agent you don't own
Shown when viewing your own agent
You've already forked this agent (links to your fork)
You've reached the maximum of 20 agents
Fork Collections
Fork collections to get a copy you can modify without affecting the original.
How to Fork a Collection
1. Navigate to a public collection's page (e.g., tpmjs.com/ajax/collections/web-scraping)
2. Click the "Fork" button
3. The collection is copied with all its tools
4. You can then add, remove, or reorder tools
5. Add your own environment variables for the tools
Collection Fork Limits
- Maximum 50 collections per user
- Forked collections start as private
- New MCP URLs are generated for your fork
Fork Attribution
TPMJS tracks fork relationships so you can see where agents and collections originated.
Forked From Badge
Forked items display a "Forked from" badge linking back to the original. This provides attribution and lets users discover the source.
Fork Count
Public agents and collections display a fork count showing how many times they've been forked. This indicates popularity and usefulness to the community.
Viewing Parent Updates
After forking, you can check what the original parent has changed by visiting its page. This lets you see new tools or collections the parent author has added.
How to View Parent Changes
1. Go to your forked agent or collection in the dashboard
2. Click the "Forked from" badge to navigate to the parent
3. The parent's page shows its current tools and collections
4. Compare with your fork to see what's different
What You Can See
When you visit the parent, you'll see its current state:
For Agents
- • Current attached tools
- • Current collections
- • Updated system prompt
- • Model and provider changes
- • Temperature and settings
For Collections
- • Current tools in collection
- • Tool order and positions
- • Updated description
- • Newly added tools
- • Removed tools
Manual Updates
TPMJS uses a manual update model—your fork doesn't automatically sync with the parent. To incorporate parent changes:
1. View the parent's current tools/collections
2. Go to your fork's edit page
3. Manually add or remove tools to match (or improve upon) the parent
4. Update settings as needed
Note: This manual approach gives you full control over what changes to accept. You can cherry-pick specific updates without taking everything the parent has changed.
API Access
You can also fetch parent information via the API:
# Get a public agent's current tools
curl "https://tpmjs.com/api/public/users/{username}/agents/{uid}"
# Response includes current tools and collections:
{
"id": "...",
"name": "Research Assistant",
"tools": [...], // Current attached tools
"collections": [...], // Current attached collections
"forkedFromId": "...", // Your fork has this pointing to parent
"forkedFrom": { ... } // Parent info (if you're viewing your fork)
}API Keys Overview
TPMJS API keys provide programmatic access to the platform. Use them for MCP connections, agent conversations, and API integrations.
Secure
Keys are hashed using SHA-256—we never store the raw key
Scoped
Fine-grained permissions control what each key can do
Tracked
Usage is recorded for monitoring and debugging
Key Format
TPMJS API keys follow a consistent format for easy identification:
tpmjs_sk_abc123def456ghi789...tpmjs_sk_prefix identifies the key type- 32 random bytes encoded as base64url
- Shown in full only once at creation time
- Displayed as prefix only (e.g., tpmjs_sk_abc1...) in the dashboard
Creating API Keys
Generate API keys from your dashboard to enable programmatic access.
Steps to Create
1. Go to Dashboard → Settings → API Keys
2. Click "Generate New Key"
3. Enter a descriptive name (e.g., "Claude Desktop")
4. Click "Create"
5. Copy the key immediately—it's only shown once!
Key Management
Activate/Deactivate
Toggle keys on/off without deleting them. Useful for temporarily disabling access.
Rotate
Generate a new key with the same name and settings. The old key is immediately invalidated.
Delete
Permanently remove a key. Cannot be undone.
Important: Your API key is displayed only once when created. Store it securely. If you lose it, you'll need to generate a new one.
Scopes & Permissions
API keys have scopes that control what actions they can perform. By default, new keys have all scopes enabled.
Available Scopes
mcp:executeExecute tools via MCP endpoints. Required for Claude Desktop and Cursor integration.
agent:chatSend messages to agents via the conversation API.
bridge:connectEstablish MCP bridge connections for local tool exposure.
usage:readAccess usage analytics and statistics via the API.
collection:readRead collection details and list collections.
Using API Keys
Include your API key in the Authorization header:
Authorization: Bearer tpmjs_sk_your_api_key_hereExample request:
curl -H "Authorization: Bearer tpmjs_sk_your_api_key" \
"https://tpmjs.com/api/agents"Rate Limits
TPMJS enforces rate limits to ensure fair usage. Limits are based on your account tier.
Limits by Tier
| Tier | Requests/Hour | Notes |
|---|---|---|
| Free | 100 | Default tier |
| Pro | 1,000 | Paid subscription |
| Enterprise | 10,000 | Custom plans |
Rate Limit Headers
Every response includes rate limit information:
X-RateLimit-Limit: 100
X-RateLimit-Remaining: 85
X-RateLimit-Reset: 1704067200Handling Rate Limits
When rate limited, you'll receive a 429 response with a Retry-After header:
{
"success": false,
"error": {
"code": "RATE_LIMITED",
"message": "Too many requests. Please try again in 60 seconds."
}
}Usage Tracking
TPMJS tracks API usage for monitoring and billing purposes. View your usage in the dashboard.
What's Tracked
- Request Count - Total API calls per period
- Token Usage - Input/output tokens for agent conversations
- Latency - Average response time per endpoint
- Error Rate - Percentage of failed requests
- Cost Estimation - Estimated LLM costs based on token usage
Usage Dashboard
View detailed usage analytics at Dashboard → Usage. The dashboard shows:
- Time-series graphs of requests and tokens
- Breakdown by endpoint and API key
- Hourly, daily, and monthly aggregations
- Cost estimates based on provider pricing
Data Retention
- Individual Records - Kept for 30 days
- Aggregated Summaries - Kept indefinitely
Access Model: Public Access with Your Credentials
You can access public agents and collections using your own API key—but you must provide all required credentials (LLM keys, tool environment variables) in the request. The owner's stored credentials are never shared.
Owners
- • Use stored credentials from dashboard
- • Access public and private resources
- • No extra parameters needed in API calls
Non-Owners
- • Can only access PUBLIC resources
- • Must provide credentials in each request
- • Owner's credentials are never used
Why This Model?
- Security - Owner credentials stay private, never shared with callers
- Transparency - Callers pay for their own LLM/tool usage
- Flexibility - Use public resources without forking
- Control - Fork when you want to customize
Accessing Agents via API
Public agents can be accessed by any authenticated user who provides their own credentials.
Accessing Your Own Agent
As the owner, just send your message—your stored LLM key and env vars are used:
POST /api/agents/{agentId}/conversation/{conversationId}
Authorization: Bearer YOUR_TPMJS_API_KEY
{
"message": "Hello, help me with..."
}Accessing Someone Else's Public Agent
You must provide your own LLM provider key and any tool environment variables:
POST /api/agents/{agentId}/conversation/{conversationId}
Authorization: Bearer YOUR_TPMJS_API_KEY
{
"message": "Hello, help me with...",
"providerApiKey": "sk-your-openai-key...",
"env": {
"UNSANDBOX_API_KEY": "your-unsandbox-key",
"FIRECRAWL_API_KEY": "your-firecrawl-key"
}
}Missing Provider API Key
If you don't provide providerApiKey for a public agent:
{
"success": false,
"error": "Public agent access requires your own API key",
"details": {
"code": "MISSING_PROVIDER_KEY",
"requiredProvider": "OPENAI",
"hint": "Provide your OPENAI API key in the 'providerApiKey' field"
}
}
// HTTP 400 Bad RequestMissing Environment Variables
If the agent's tools require env vars you didn't provide:
{
"success": false,
"error": "Missing required environment variables",
"details": {
"code": "MISSING_ENV_VARS",
"missingVars": [
{ "name": "UNSANDBOX_API_KEY", "description": "API key for code execution" },
{ "name": "FIRECRAWL_API_KEY", "description": "API key for web scraping" }
],
"hint": "Provide these variables in the 'env' field of your request"
}
}
// HTTP 400 Bad RequestWho Pays?
The caller always pays. When accessing a public agent, you provide your own LLM API key—so LLM costs go to your account. When accessing your own agent, your stored keys are used.
Accessing Collections via MCP
Public collections can be accessed by any authenticated user who provides their own environment variables.
Accessing Your Own Collection
As the owner, just make MCP calls—your stored env vars are used:
{
"jsonrpc": "2.0",
"method": "tools/call",
"params": {
"name": "tpmjs-unsandbox-executeCode",
"arguments": { "code": "print('hello')" }
},
"id": 1
}Accessing Someone Else's Public Collection
You must provide environment variables in the env field of params:
{
"jsonrpc": "2.0",
"method": "tools/call",
"params": {
"name": "tpmjs-unsandbox-executeCode",
"arguments": { "code": "print('hello')" },
"env": {
"UNSANDBOX_API_KEY": "your-unsandbox-key"
}
},
"id": 1
}Missing Environment Variables
If you don't provide required env vars:
{
"jsonrpc": "2.0",
"id": 1,
"error": {
"code": -32602,
"message": "Missing required environment variables",
"data": {
"missingVars": [
{ "name": "UNSANDBOX_API_KEY", "description": "API key for code execution" }
]
}
}
}Who Pays?
The caller always pays. When accessing a public collection, you provide your own tool API keys—so tool costs (if any) go to your accounts. Rate limits are tracked against your TPMJS API key.
Common Access Errors
Reference of errors you may encounter when accessing agents and collections.
UnauthorizedNo API key provided or invalid format. Include Authorization: Bearer tpmjs_sk_... header.
Missing ScopeAPI key lacks required scope. Agents need agent:chat, collections need mcp:execute.
Not Found / PrivateResource doesn't exist or is private. Non-owners can only access PUBLIC agents/collections.
Missing Provider KeyFor public agents: provide providerApiKey in your request. For your own agents: add your LLM key in Dashboard → Settings.
Missing Env VarsTools require environment variables you didn't provide. Check the error details for the list of required vars.
Rate LimitedExceeded your hourly request limit. Wait for the reset or upgrade your tier.
Platform Limits
Reference of all platform limits to help you plan your usage.
User Limits
| Resource | Limit | Description |
|---|---|---|
| Collections | 50 | Maximum collections per user |
| Agents | 20 | Maximum agents per user |
| API Keys | 10 | Maximum API keys per user |
Collection Limits
| Resource | Limit | Description |
|---|---|---|
| Tools | 100 | Maximum tools per collection |
| Bridge Tools | 50 | Maximum bridge tools per collection |
| Name Length | 100 chars | Maximum collection name length |
| Description | 500 chars | Maximum description length |
| Tool Notes | 500 chars | Maximum note length per tool |
Agent Limits
| Resource | Limit | Description |
|---|---|---|
| Tools | 50 | Maximum tools per agent |
| Collections | 10 | Maximum collections per agent |
| System Prompt | 10,000 chars | Maximum system prompt length |
| Name Length | 100 chars | Maximum agent name length |
| Description | 500 chars | Maximum description length |
| UID Length | 50 chars | Maximum UID length |
Conversation Limits
| Resource | Limit | Description |
|---|---|---|
| Conversations | 100 | Maximum conversations per agent |
| Message Length | 50,000 chars | Maximum message length |
| Title Length | 200 chars | Maximum conversation title |
URL Reference
Complete reference of all shareable URLs on TPMJS.
| Type | URL Pattern |
|---|---|
| User Profile | /{username} or /@{username} |
| Agent Detail | /{username}/agents/{uid} |
| Agent Chat | /{username}/agents/{uid}/chat |
| Collection | /{username}/collections/{slug} |
| Tool | /tool/{package}/{tool} |
| API Endpoints | |
| MCP Server (HTTP) | /api/mcp/{username}/{slug}/http |
| MCP Server (SSE) | /api/mcp/{username}/{slug}/sse |
| Agent Conversation | /api/{username}/agents/{uid}/conversation/{id} |
Ready to Get Started?
Create your account and start building with TPMJS today.