Add Model Context Protocol (MCP) server endpoint for collections,
allowing users to connect Claude Desktop, Cursor, and other MCP
clients to use tools from their collections.
- POST /api/collections/[id]/mcp - JSON-RPC endpoint for MCP
- GET /api/collections/[id]/mcp - Server info for discovery
- Tool name conversion (e.g., @tpmjs/hello → tpmjs-hello--helloWorldTool)
- Handlers for initialize, tools/list, tools/call methods
- Executes tools via existing sandbox executor
Only public collections are accessible (no auth required).
- Add AppHeader component to dashboard main page
- Add AppHeader to collections list page (loading, error, and main states)
- Add AppHeader to collection detail page (loading, error, and main states)
Ensures top navigation menu is visible on all dashboard pages for
both authenticated and unauthenticated users.
- Add Collection and CollectionTool models to Prisma schema
- Create Zod validation schemas for collections
- Implement full CRUD API routes for collections
- Add tool management endpoints (add/remove tools)
- Create UI components: CollectionCard, CollectionForm, CollectionList,
AddToolSearch, CollectionToolList
- Add /dashboard/collections pages for list and detail views
- Add new icons to @tpmjs/ui: folder, plus, trash, edit, box, search,
loader, arrowLeft, alertCircle, globe
- Add xs size variant to Icon component
- Add Collections link to dashboard page
Features:
- Full CRUD for named collections
- Public/private visibility toggle
- Tool search to add tools to collections
- Ownership-based access control
- Collection limit: 50 per user
- Tool limit: 100 per collection
- Add ToolSearchResult interface with biome-ignore for dynamic tool types
- Add biome-ignore comments for UIMessage.parts type casting
- Add biome config overrides for complexity warnings in MessageBubble.tsx
- Add biome config override for MobileMenu.tsx a11y rule
- Add biome config override for railway-executor complexity
- Fix unused template literal in railway-executor
- All lint tasks now pass with 0 errors
🤖 Generated with [Claude Code](https://claude.ai/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Create AuthHeader component with logo and contextual auth link
- Show "Sign Up" on sign-in page and vice versa
- Keep centered form layout with header at top
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
better-auth uses __Secure- prefix for session cookies on HTTPS,
but middleware was only checking for the unprefixed cookie name
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Add onSuccess/onError callbacks to signIn.email() for better response handling
- Add trustedOrigins configuration for production domain
- Configure explicit cookie attributes (sameSite, secure, httpOnly)
- Enable session cookie caching for better performance
- Handle edge case where signIn returns neither data nor error
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
VERCEL_URL returns deployment URL (tpmjs-xxx.vercel.app) not custom domain.
This was causing session cookies to be set for wrong domain.
Now prioritizes BETTER_AUTH_URL, then checks VERCEL_ENV=production to use tpmjs.com.
- Add Sign In button to desktop header (shows Dashboard when logged in)
- Add Sign In/Sign Up links to mobile menu
- Fix auth config to use BETTER_AUTH_SECRET and BETTER_AUTH_URL env vars
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Add virtualized list using react-virtuoso for smooth scrolling
- Filter by category, verb, quality score, and search
- Expandable cards with parameters, returns, AI guidance
- Add redirect from /tools-ideas to /tool-ideas
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Split camelCase/PascalCase into words (sitemapReadTool → sitemap read tool)
- Add +100 score boost for exact tool name matches
- Fixes issue where searching exact tool name returned 0 results
Add core categories used by 100+ official tools:
- research, web, data, documentation, engineering
- security, statistics, ops, agent, utilities
- html, compliance, doc, text
This fixes sync validation failures for tools using these categories.
- List HLLM as primary integration with tpmjs.com
- Add BlocksAI case study showing how 106 tools were built
- Display 9 philosophy principles and 11 tool categories
- Simplify ecosystem diagram to show flow: BlocksAI → Tools → HLLM
- Fix lint issues with variable declarations
- Frames HLLM, TPMJS, BlocksAI as three layers of an AI infrastructure stack
- HLLM = Orchestration layer (Kubernetes of AI)
- TPMJS = Distribution layer (npm of AI)
- BlocksAI = Semantic layer (TypeScript of AI)
- Articulates the paradigm shift from monolithic agents to composable systems
- Adds web stack analogy to explain separation of concerns
- Focuses on the 5 novel ideas that make this different
- Removes implementation details in favor of big picture vision
Add validation entries for tools that were published to npm but were
missing from blocks.yml:
Data category tools:
- data.base64Decode
- data.base64Encode
- data.dateParse
- data.hashText
- data.htmlToMarkdown
- data.jsonPathQuery
- data.markdownToHtml
- data.regexExtract
- data.schemaInfer
- data.templateRender
- data.urlParse
Security category tools:
- sec.htmlSanitize
- Convert to client component with useState for view toggling
- Add "Specification" view with clean schema reference and sidebar
- Add "Full Example" view with complete package.json and tool code examples
- Remove explanatory content (moved elsewhere)
- Create layout.tsx for metadata since page is client component
- Reduce page complexity from 839 to 406 lines
- Reduce cron frequency: changes 2min→4hr, keyword 15min→6hr, metrics hourly→daily
- Add Prisma directUrl for connection pooling support
- Add Vercel KV caching to /api/tools endpoint (graceful degradation if not configured)
- Add X-Cache header to indicate cache hit/miss
- Add NEON_COMPUTE_OPTIMIZATION.md with full strategy guide
These changes should reduce Neon CU usage from 100+ to ~20-30 CU-hrs/month.
- Build Your First Tool: Step-by-step guide from npm init to published
- Real-World Agent: Complete working example with meta-tools
- Interactive Playground: How to test tools in browser
Each tutorial has 5-6 slides with code examples and animations.
Updated main page to show all 6 tutorials in grid.
- Add 6-slide overview tutorial covering TPMJS concepts
- Slides: Welcome, What is TPMJS, Ecosystem, Architecture, Use Cases, Explore
- Add OverviewSlideshow component and page route at /overview
- Update main tutorial page with overview as first card
Import zod@4 directly and use z.toJSONSchema method with fallback
to z.default.toJSONSchema for compatibility.
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
Static import from 'zod@4/json-schema' was failing and crashing executor.
Use dynamic import inside the schema extraction logic instead.
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Import Zod v4's toJSONSchema from zod@4/json-schema
- Add Strategy 3: Detect Zod v4 schemas via ._zod property
- Convert Zod v4 schemas using native toJSONSchema function
- Update error message to mention both Zod v4 and v3 support
Fixes schema extraction for @tpmjs/emoji-magic and other Zod v4 tools
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>