AgentToolStore / server /SERVER_SPEC.md
Mrw33554432
AgentToolStore v2: MCP client + Skills manager + MCP server + Registry
724a7fb
|
Raw
History Blame Contribute Delete
2.26 kB

ToolStore Server Specification

Status: Planning Focus: Central Registry for Publishing & Distributing Tools


1. Core Architecture

The server acts as the "Source of Truth" for the public tool index.

Components

  1. API (FastAPI): Handles publishing and index generation.
  2. Database (SQLite/Postgres): Stores persistent tool data and user accounts.
  3. Storage: Stores raw JSON tool definitions (could be DB or S3).

2. API Endpoints

Public

  • GET /index.json: Returns the full list of tools (the "Index"). Cached aggressively.
  • GET /tools/{name}: Returns details for a specific tool.
  • GET /search?q=...: Server-side search (optional, since client does local search).

Publisher (Authenticated)

  • POST /auth/register: Create a developer account.
  • POST /auth/login: Get an API token.
  • POST /tools/publish: Upload a new tool definition (tool.json).
    • Validates schema.
    • Checks namespace ownership.
    • Updates the database.

3. Database Schema (SQLModel)

User

  • id: int
  • username: str (unique)
  • email: str
  • password_hash: str
  • created_at: datetime

Tool

  • id: int
  • name: str (unique)
  • owner_id: int (FK -> User)
  • version: str
  • type: str ('api', 'mcp')
  • description: str
  • definition: JSON (The full tool schema)
  • created_at: datetime
  • updated_at: datetime
  • downloads: int

4. Implementation Plan

Phase 1: Project Skeleton

  • Initialize FastAPI project (server/app).
  • Setup SQLModel database connection.
  • Create User and Tool models.

Phase 2: Authentication

  • Implement User Registration.
  • Implement Login (JWT Tokens).
  • Protect publish endpoints.

Phase 3: Publishing Flow

  • Implement POST /tools/publish.
  • Add JSON Schema validation for uploaded tools.
  • Ensure unique names.

Phase 4: Index Generation

  • Implement GET /index.json.
  • Query DB -> Format as massive JSON list.
  • Add simple caching headers.

Goal: A running server where I can POST a tool JSON and then GET index.json to see it.