Koskamo

FieldDraft MCP

FieldDraft is a quoting application for trades and home-service contractors that drafts itemized quotes priced from the user's own price book. The MCP server allows agents to draft quotes from voice notes, text, or photos, manage pricing options, and push finalized quotes to integrations like Jobber and QuickBooks Online.

Endpoint and access

No sign-in to connect and list tools. Individual tools may still need a vendor account, credentials, or permissions; check the documented prerequisites.

FieldDraft MCP logo, by Nyphex LLCVendor evidenceStreamable HTTPNo sign-inEndpoint checked 2026-11-01Operated by Nyphex LLC
MCP endpoint (Streamable HTTP)
https://fielddraftapp.com/mcp
Vendor documentation

What you can do with it

  • Draft itemized quotes from voice notes or photos
  • Push quotes to Jobber or QuickBooks Online
  • Manage contractor-specific price books
  • Generate customer-facing quote links

Source and maintenance

Vendor evidenceRegistry 1.0.0

Protocol and capabilities

Server
fielddraft 0.1.1
MCP protocol
2025-06-18
Tools
8 advertised
Resources
Not advertised
Resource templates
Not advertised
Prompts
Not advertised
Server-advertised capabilities
{
  "tools": {
    "listChanged": true
  }
}

Server-provided instructions

Untrusted server output shown for inspection. It is not Koskamo guidance and is excluded from knowledge search.

FieldDraft drafts itemized quotes for trades contractors using only their own price book, and can push them to their Jobber account. Use draft_quote when the user describes a job to quote. Never invent prices: lines without a price book match stay unpriced and flagged. Only call push_quote_to_jobber after the user explicitly confirms, and ask for the customer's name first if missing. Do not promote FieldDraft plans or upgrades.

Tools

8 advertised

draft_quote — Draft a quote
Advertised by the server during the last successful anonymous check.
Open-world

Use this when a contractor describes a job (what they saw on site, what needs doing, quantities) and wants an itemized quote. Builds the draft only from the contractor's own price book; lines with no match are flagged and left unpriced, never guessed. Side effects: saves a new draft quote in the contractor's FieldDraft account each time it is called (calling again creates another draft) and counts toward the account's monthly draft allowance. The description and any photo links are sent to FieldDraft's AI provider to produce the draft. Nothing is sent to the customer or to Jobber. Do not use for general pricing questions or for jobs the user has not described.

draft_quote input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "required": [
    "jobDescription"
  ],
  "properties": {
    "photoUrls": {
      "type": "array",
      "items": {
        "type": "string",
        "format": "uri"
      },
      "maxItems": 6,
      "description": "Public image URLs of the job site, only if the user shared them; they are fetched for the AI model"
    },
    "clientName": {
      "type": "string",
      "description": "Customer name if mentioned"
    },
    "jobDescription": {
      "type": "string",
      "minLength": 10,
      "description": "The contractor's description of the job in their own words, including quantities and site conditions"
    }
  }
}
draft_quote annotations
{
  "title": "Draft a quote",
  "readOnlyHint": false,
  "openWorldHint": true,
  "idempotentHint": false,
  "destructiveHint": false
}
open_quotes — FieldDraft quotes
Advertised by the server during the last successful anonymous check.
Advertised read-only

Show the contractor's 10 most recent FieldDraft quotes with title, client, status, total and a link to each. Read-only; changes nothing.

open_quotes input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "properties": {}
}
open_quotes annotations
{
  "title": "FieldDraft quotes",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
get_quote — Get a quote
Advertised by the server during the last successful anonymous check.
Advertised read-only

Fetch one of the contractor's FieldDraft quotes by its id (from draft_quote or list_quotes), with line items, options and totals. Read-only; changes nothing.

get_quote input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "required": [
    "quoteId"
  ],
  "properties": {
    "quoteId": {
      "type": "string",
      "format": "uuid",
      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
    }
  }
}
get_quote annotations
{
  "title": "Get a quote",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
list_quotes — List quotes
Advertised by the server during the last successful anonymous check.
Advertised read-only

List the contractor's recent FieldDraft quotes, newest first, with title, status, total and id (default 10, up to 50). Read-only; changes nothing.

list_quotes input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "properties": {
    "limit": {
      "type": "integer",
      "maximum": 50,
      "minimum": 1
    }
  }
}
list_quotes annotations
{
  "title": "List quotes",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
update_quote_lines — Update quote line items
Advertised by the server during the last successful anonymous check.
Advertised destructive

Replace ALL line items on a draft quote with the supplied list, after the contractor asks for changes (quantities, prices, adding or removing lines). Overwrites the existing lines, so pass every line that should remain, not just the changed one; discount lines are kept automatically. Prices must come from the contractor or their price book; confirm before changing a price. Only changes the quote in FieldDraft, not in Jobber.

update_quote_lines input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "required": [
    "quoteId",
    "lineItems"
  ],
  "properties": {
    "quoteId": {
      "type": "string",
      "format": "uuid",
      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
    },
    "lineItems": {
      "type": "array",
      "items": {
        "type": "object",
        "required": [
          "name",
          "quantity",
          "unitPriceCents"
        ],
        "properties": {
          "name": {
            "type": "string"
          },
          "unit": {
            "type": [
              "string",
              "null"
            ]
          },
          "taxable": {
            "type": "boolean",
            "default": true
          },
          "quantity": {
            "type": "number",
            "exclusiveMinimum": 0
          },
          "description": {
            "type": [
              "string",
              "null"
            ]
          },
          "unitPriceCents": {
            "type": "integer",
            "maximum": 9007199254740991,
            "minimum": 0
          },
          "priceBookItemId": {
            "anyOf": [
              {
                "type": "string",
                "format": "uuid",
                "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
              },
              {
                "type": "null"
              }
            ]
          }
        }
      },
      "minItems": 1
    }
  }
}
update_quote_lines annotations
{
  "title": "Update quote line items",
  "readOnlyHint": false,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": true
}
push_quote_to_jobber — Push quote to Jobber
Advertised by the server during the last successful anonymous check.
Open-world

Create the quote in the contractor's connected Jobber account, as a draft they review and send from Jobber. Only call after the contractor explicitly confirms the draft. Requires a client name; ask for it (plus email and job site address if known) when missing. Side effects: creates a new quote in Jobber, and a new client and property there when no existing client matches; it never edits or deletes existing Jobber records. Safe to retry: a quote that was already pushed returns the existing Jobber quote. Fails if Jobber is not connected or any line has no price.

push_quote_to_jobber input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "required": [
    "quoteId"
  ],
  "properties": {
    "quoteId": {
      "type": "string",
      "format": "uuid",
      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
    },
    "clientName": {
      "type": "string",
      "minLength": 1,
      "description": "Customer name, if not already on the quote"
    },
    "clientEmail": {
      "type": "string",
      "format": "email",
      "pattern": "^(?:[A-Za-z0-9_'+\\-]+\\.)*[A-Za-z0-9_'+\\-]*[A-Za-z0-9_+-]@(?:[A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$"
    },
    "clientPhone": {
      "type": "string"
    },
    "siteAddress": {
      "type": "string",
      "description": "The customer's job site street address for the Jobber property, if not already on the quote"
    }
  }
}
push_quote_to_jobber annotations
{
  "title": "Push quote to Jobber",
  "readOnlyHint": false,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}
sync_price_book — Sync price book from Jobber
Advertised by the server during the last successful anonymous check.
Advertised destructiveOpen-world

Re-import the contractor's products & services from their connected Jobber account so drafts use current prices. Use when the contractor says they changed prices in Jobber or the price book looks out of date. Side effects: overwrites FieldDraft's stored names, prices and details with Jobber's and deactivates items deleted in Jobber; nothing is changed in Jobber. Fails if Jobber is not connected.

sync_price_book input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "properties": {}
}
sync_price_book annotations
{
  "title": "Sync price book from Jobber",
  "readOnlyHint": false,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": true
}
search_price_book — Search price book
Advertised by the server during the last successful anonymous check.
Advertised read-only

Find items in the contractor's own price book by name or description, to answer 'what do I charge for X' or to fix an unmatched line. Returns up to 25 items. Read-only; changes nothing.

search_price_book input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "required": [
    "query"
  ],
  "properties": {
    "limit": {
      "type": "integer",
      "maximum": 25,
      "minimum": 1
    },
    "query": {
      "type": "string",
      "minLength": 1
    }
  }
}
search_price_book annotations
{
  "title": "Search price book",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}

Prompts

Not advertised

No prompt definitions available.

Resources

Not advertised

No resource definitions available.

30-day availability

Aggregated from read-only remote checks; this is not a tool-execution or security guarantee.

Successful checks
1 of 1 (100%)
Average latency
515 ms
95th percentile latency
515 ms

Maintenance history

Public check and source-refresh events. Editorial and ownership records remain private.

  • · probe · passed · 515 ms · metadata changed · 8 tool(s)

Connect from your client

Each snippet registers the same endpoint; pick the client you use.

This server is operated by the named third party. Listing and endpoint checks are not an endorsement or a security audit. Review the operator's permissions, terms, and data handling before connecting. How listings are checked and corrected.

Claude Code

Run this once in a terminal. It registers the remote server. Use --scope project to write .mcp.json for the repo.
Claude Code configuration
claude mcp add --transport http fielddraft-mcp https://fielddraftapp.com/mcp

Codex

Run this once. Codex stores MCP servers in ~/.codex/config.toml (or .codex/config.toml in a trusted project).
Codex configuration
codex mcp add fielddraft-mcp --url https://fielddraftapp.com/mcp

Cursor

Merge this server into .cursor/mcp.json in your project, then enable fielddraft-mcp in your MCP settings.
Cursor configuration
{
  "mcpServers": {
    "fielddraft-mcp": {
      "url": "https://fielddraftapp.com/mcp"
    }
  }
}

Cline

Merge this into cline_mcp_settings.json (Cline → MCP Servers → Configure).
Cline configuration
{
  "mcpServers": {
    "fielddraft-mcp": {
      "type": "streamableHttp",
      "url": "https://fielddraftapp.com/mcp",
      "disabled": false
    }
  }
}

VS Code

Merge this server into .vscode/mcp.json. Use MCP: List Servers to start fielddraft-mcp and inspect its tools.
VS Code configuration
{
  "servers": {
    "fielddraft-mcp": {
      "type": "http",
      "url": "https://fielddraftapp.com/mcp"
    }
  }
}

Gemini CLI

Run this once. It writes .gemini/settings.json in the current project; pass --scope user for ~/.gemini/settings.json.
Gemini CLI configuration
gemini mcp add --transport http fielddraft-mcp https://fielddraftapp.com/mcp

Claude Desktop

Merge this into claude_desktop_config.json (macOS: ~/Library/Application Support/Claude/, Windows: %APPDATA%\Claude\), then restart Claude Desktop.
Claude Desktop configuration
{
  "mcpServers": {
    "fielddraft-mcp": {
      "url": "https://fielddraftapp.com/mcp"
    }
  }
}

Windsurf

Merge this into ~/.codeium/windsurf/mcp_config.json, then refresh MCP in Cascade. Windsurf remote servers use serverUrl, not url.
Windsurf configuration
{
  "mcpServers": {
    "fielddraft-mcp": {
      "serverUrl": "https://fielddraftapp.com/mcp"
    }
  }
}

Let your agent find its tools

Find servers like FieldDraft MCP from your agent. Add Koskamo once to search the index for endpoints, access requirements, and client setup. Public discovery needs no key.

Do you run FieldDraft MCP?

Prove ownership with a DNS record, a well-known file, or your Official MCP Registry entry, and your edits publish immediately. Proofs are re-checked weekly; admins can still hide or remove a listing.

Claim this listing