> ## Documentation Index
> Fetch the complete documentation index at: https://apidocs.neetoform.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Tools

> Every tool the NeetoForm MCP server exposes, grouped by what it acts on.

The assistant picks tools on its own from what you ask, so this page is for
working out what is reachable rather than something you call by hand.

Every tool takes an optional `workspace` argument holding a subdomain. Leave it
off and the tool runs against the connection's default workspace.

What a tool returns depends on how you connected. Over OAuth, listings are
filtered to what your account can see and a record you cannot open is refused.
With an API key there is no user to filter by, so tools reach the whole
workspace. See [Authentication](/mcp/authentication).

## Discovery

| Tool             | What it does                                                                                                                                          |
| ---------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------- |
| `ListWorkspaces` | Lists the workspaces this connection can reach, with the subdomain to pass as `workspace`.                                                            |
| `search`         | Searches active forms by title and returns each match with its id, title, an openable URL and a snippet of its first questions. Capped at 20 results. |
| `fetch`          | Returns one form's questions and status by id, with an openable URL.                                                                                  |

`search` and `fetch` are the pair a client uses to look something up and then
read it, so an assistant that only knows a form's name can still reach it.

## Forms

| Tool              | What it does                                                                                          | API reference                                       |
| ----------------- | ----------------------------------------------------------------------------------------------------- | --------------------------------------------------- |
| `ListForms`       | Lists forms in the workspace, optionally filtered to `active`, `archived` or `favorite`. Paginated.   | [List all forms](/api-reference/forms/list)         |
| `ListSubmissions` | Lists completed submissions for a form, with each answer's question, field kind and value. Paginated. | [List submissions](/api-reference/submissions/list) |

`ListSubmissions` strips internal bookkeeping out of each answer before it
returns: record ids, positions, timestamps and the signed URLs behind uploaded
files. Photo and signature answers come back as a filename rather than a link.

## Team members

| Tool               | What it does                                                                                        | API reference                                             |
| ------------------ | --------------------------------------------------------------------------------------------------- | --------------------------------------------------------- |
| `ListTeamMembers`  | Lists active members, optionally filtered by exact email. Paginated.                                | [List all team members](/api-reference/team-members/list) |
| `GetTeamMember`    | Returns one member by id.                                                                           | [Get a team member](/api-reference/team-members/show)     |
| `CreateTeamMember` | Invites one or more people by email, defaulting to the `Standard` role.                             | [Add team members](/api-reference/team-members/add)       |
| `UpdateTeamMember` | Changes a member's email, name, time zone or organization role. Only the fields passed are changed. | [Update team member](/api-reference/team-members/update)  |
| `DeleteTeamMember` | Deactivates a member. Their forms and submissions are left intact.                                  | [Remove team member](/api-reference/team-members/remove)  |

`CreateTeamMember` is all-or-nothing. Every address must be a well-formed email,
and if any address or the role is rejected nobody is added, so a failed call
leaves the workspace unchanged and is safe to retry. The error names every
address at fault. An email that already belongs to the workspace is reactivated
rather than duplicated, and its organization role is overwritten.

Organization role names are matched against the roles in your workspace and are
case-sensitive. If the assistant reports an unknown role, the error lists the
roles that exist.

## Permissions

Over OAuth, the four team-member write tools and `GetTeamMember` also check your
own permissions before doing anything: viewing members needs a role that can view
them, and inviting, updating or deactivating needs one that can manage them.
Changing someone's organization role needs the permission to manage roles as
well. An API key connection carries no user, so these checks do not apply.
