# TIGER FORM MCP

Production remote MCP server for the **form owner**: create and manage forms, then share the public URL so respondents fill them.

**Status:** Generally available (not beta or alpha)  
**Transport:** Streamable HTTP  
**Server URL:**

```
https://api.form-qr-code-generator.com/mcp
```

Respondents never use this MCP server. They open the form’s public URL. File answers (picture, document, signature, video, audio) are uploaded on that public form — MCP cannot upload files. Listing those answers returns metadata only (name, size); `fileId` is often empty and there is no download URL.

## Features

- Create, clone, edit, archive, restore, and delete forms
- Archive hides a form from Current; the public URL still accepts submissions until you unpublish
- Add, update, reorder, or remove fields (including number `min` / `max`)
- Publish or unpublish; set expiry date, scan cap, or max submissions
- List and inspect submissions; export CSV; analyze counts and breakdowns
- Insert a **test** submission (`source=mcp_test`) to preview a form
- Show the signed-in account (`whoami`) and list team members

## Setup

Paste the same MCP URL into each chat app, then **Sign in with TIGER FORM** (OAuth). Do not paste an MCP key into a chat-app connector.

### Claude

1. Open [claude.ai](https://claude.ai) → **Customize** → **Connectors** → **Add custom connector**.
2. Paste `https://api.form-qr-code-generator.com/mcp`.
3. Connect, then Sign in with TIGER FORM.
4. Write tools prompt for approval. **“No approval received”** means that card was dismissed, not an API error. Choose **Always allow** on the card, or open the connector and set tools to **Always allow**.

You can also add TIGER FORM from the Claude connector directory once it is listed.

### ChatGPT

ChatGPT web on Plus/Pro or a workspace — not Free. The chat home screen has no Add connector.

1. Profile → **Settings** → **Apps** (or Plugins) → **Advanced settings** → turn on **Developer mode**.
2. **Create** a connector and paste `https://api.form-qr-code-generator.com/mcp`.
3. Authorize TIGER FORM.

Write tools may be gated by the ChatGPT plan. Listing in the public ChatGPT Apps directory is a separate submission.

### Gemini

Gemini web, including Google AI Plus. If **Connectors** → **+ Custom** is on the page, you can add TIGER FORM (not limited to the US). Work or school Workspace accounts may still be blocked by Google.

1. Open [gemini.google.com](https://gemini.google.com) → **Connectors** (or **Settings** → **Connected Apps**).
2. Click **+ Custom**.
3. In **MCP Server URL**, paste `https://api.form-qr-code-generator.com/mcp` (https required) → **Next** → Sign in with TIGER FORM.

Leave Additional settings collapsed. After it is connected, type `@` in chat and pick TIGER FORM so Gemini uses the connector.

### Perplexity

1. **Settings** → **Connectors** → **Custom connector**.
2. Paste `https://api.form-qr-code-generator.com/mcp` and authorize TIGER FORM.

A paid Perplexity plan may be required. Plan gates are controlled by Perplexity.

### Inspector, Claude Code, Cursor

These clients use a **Bearer MCP key**, not the chat-app OAuth button.

1. In TIGER FORM: **Settings** → **Integration** → create an MCP key (`tf_...`).
2. Send `Authorization: Bearer tf_...`.

Inspector:

```
npx @modelcontextprotocol/inspector
```

Transport: Streamable HTTP. URL: the MCP server URL above (or local `/mcp`).

## Authentication

1. **OAuth 2.1** (Claude, ChatGPT, Gemini, Perplexity): paste the MCP URL, then sign in on the TIGER FORM website (Google or email). If you are already signed in, confirm **Allow access**. Do not paste an MCP key into a chat-app connector.
2. **Bearer integration key** (Inspector, Claude Code, Cursor): create a key in TIGER FORM → Settings → Integration. Header: `Authorization: Bearer tf_...`

MCP keys are separate from the dashboard session token and can be revoked there.

## Examples

Ask the connected assistant in natural language. These are three real owner workflows:

### 1. Create a registration form

> Create a TIGER FORM event registration form titled “Workshop signup” with name, email, phone, and a number field “Guests” from 1 to 8. Then give me the public URL to share.

Tools: `create_form` (number field `min`/`max`) → share `shortUrl`. Do **not** collect real responses with `create_submission`.

### 2. Export a submission report

> Export the latest submissions for my “Workshop signup” form as CSV I can open in Excel.

Tools: `list_forms` (find `qrId`) → `export_submissions`. Use `analyze_submissions` only for counts and breakdowns, not a file dump.

### 3. Clone a form

> Duplicate my “Workshop signup” form for next month. Keep the fields; do not copy old submissions.

Tools: `list_forms` → `clone_form`. The new form starts at 0 submissions. Share its new public URL.

## Privacy

Connecting an AI assistant shares form structure and submission data in the signed-in account with that provider.

- Privacy Notice: https://www.form-qr-code-generator.com/privacy-notice
- Terms: https://www.form-qr-code-generator.com/general-terms-and-conditions

## Support

- Contact page: https://www.form-qr-code-generator.com/contact-us
- Email: tiger-form@qrtiger.helpscoutapp.com
- Hours: Monday–Friday, business hours (UTC+7)
- SLA: https://docs.form-qr-code-generator.com/v1/sla.html
- Status: https://docs.form-qr-code-generator.com/v1/status.html

When reporting an MCP issue, include the tool name, which assistant (Claude, ChatGPT, Gemini, Perplexity), approximate UTC time, and the error text (never send API keys, MCP keys, or passwords).

**Review / test account:** Directory reviewers (Anthropic, OpenAI, and others) can email support for a staging account with sample forms and submissions.

## Roles

`whoami` returns `teamRole`, `formListScope`, `canSetExpiry`, `canListTeamMembers`, and related flags.

- **Viewer:** read-only. `list_forms` returns team forms. Write tools and `list_team_members` are denied.
- **Editor:** create, edit, and delete forms and submissions they created. `list_forms` returns only those forms — an empty list is not an error. `list_team_members` is denied.
- **Owner / Admin:** all team forms. Only these roles can call `list_team_members`.

`create_submission`, `update_submission`, and `delete_submission` are owner/Editor **test helpers**, not how respondents submit.

## Tools

Account: `whoami`, `list_team_members`  
Forms: `list_forms`, `get_form`, `create_form`, `clone_form`, `edit_form`, `set_form_status`, `add_field`, `update_field`, `remove_field`, `reorder_field`, `archive_form`, `restore_form`, `delete_form`  
Submissions: `get_submissions`, `get_submission`, `create_submission` (test row only), `update_submission`, `delete_submission`, `export_submissions`, `analyze_submissions`

Every tool declares MCP safety annotations on `tools/list`:

| Annotation | Tools |
| --- | --- |
| `readOnlyHint: true` | `whoami`, `list_forms`, `get_form`, `get_submissions`, `get_submission`, `export_submissions`, `analyze_submissions`, `list_team_members` |
| `destructiveHint: true` | `delete_form`, `delete_submission`, `remove_field` |
| `idempotentHint: true` | `create_form`, `clone_form`, `archive_form`, `restore_form`, `set_form_status` (also `edit_form`, `update_field`, `reorder_field`) |

Tool results are capped under the 25,000-token limit.

## Operator notes

Express serves `/mcp` and OAuth at `/authorize`, `/token`, `/register`. On the `api.` host, nginx must proxy those paths **without** the `/api/` rewrite used for REST.

Staging: `https://staging-api.form-qr-code-generator.com/mcp`  
Local: `http://localhost:3001/mcp`

```
cd api && npm test
cd api-docs && npm run mcp-regression
```
