@usefillo/mcp 0.6.0 → 0.7.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (3) hide show
  1. package/README.md +69 -6
  2. package/dist/index.js +2458 -219
  3. package/package.json +1 -1
package/README.md CHANGED
@@ -75,16 +75,79 @@ a project switches the context back to the account.
75
75
  | `fillo_get_form` | none (published) | Fetch a published form's schema, theme, and capabilities. |
76
76
  | `fillo_search_examples` | none | Search the curated Fillo example library. |
77
77
  | `fillo_docs` | none | Fetch a Fillo docs page as Markdown by topic. |
78
- | `fillo_list_responses` | `fsk_` API key | List a form's responses (claimed workspaces only). |
78
+ | `fillo_list_responses` | login token or `fsk_` key | List a form's accepted responses (claimed workspaces only). |
79
+ | `fillo_search_library` / `fillo_get_library_form` | none | Search and read the public form library. |
79
80
  | `fillo_get_response` | `fsk_` API key | Fetch one response (claimed workspaces only). |
80
81
  | `fillo_response_summary` | `fsk_` API key | Summarize a form's responses without reading every row (claimed workspaces only). |
81
82
  | `fillo_claim_status` | `pk_` | Report the provisioned workspace's caps and claim deadline. |
82
83
 
83
- There are no delete tools. Write annotations still use the conservative
84
- worst-case hint because a push can replace draft state and a publish can replace
85
- the public schema. Every tool is a thin wrapper over Fillo's public HTTP API —
86
- the server never touches the database and imports no app code, so workspace
87
- scoping, rate limits, and validation stay in one place.
84
+ ### Managing a claimed workspace
85
+
86
+ Everything a member can do in the Fillo dashboard also has a tool, under the
87
+ SAME NAME the hosted Fillo MCP server uses — one name, one capability, whichever
88
+ server your agent reached. Each one calls the HTTP route the Fillo CLI calls:
89
+ your `fcli_` login token when you have one (`npx @usefillo/cli login` or
90
+ `FILLO_TOKEN`), otherwise an `fsk_` project API key in `FILLO_API_KEY` carrying
91
+ the named scope. With both, the login token wins — a key has no acting human.
92
+
93
+ | Area | Tools | Scope |
94
+ | --- | --- | --- |
95
+ | Form lifecycle | `fillo_pull_form`, `fillo_rename_form`, `fillo_duplicate_form`, `fillo_unpublish_form`, `fillo_discard_changes`, `fillo_delete_form`, `fillo_list_versions` | `forms:read`, `forms:write` |
96
+ | Uploads | `fillo_get_storage`, `fillo_set_storage`, `fillo_list_drive_folders`, `fillo_set_drive_folder`, `fillo_reset_drive_folder` | `storage:manage` |
97
+ | Settings | `fillo_get_settings`, `fillo_update_settings` | `settings:manage` (plus `forms:write` for the presentation keys) |
98
+ | Destinations | `fillo_get_integration`, `fillo_enable_integration`, `fillo_disable_integration`, `fillo_list_connections`, `fillo_select_connection`, `fillo_disconnect_integration`, `fillo_remove_connection_account`, `fillo_rename_discord_channel`, `fillo_hubspot_properties`, `fillo_hubspot_pipelines` | `integrations:manage` |
99
+ | Responses and delivery | `fillo_list_held_responses`, `fillo_release_responses`, `fillo_delete_response`, `fillo_delivery_status`, `fillo_retry_deliveries`, `fillo_redeliver_responses`, `fillo_list_drafts`, `fillo_form_insights`, `fillo_list_respondents`, `fillo_delete_respondent` | `responses:manage`, `respondents:*`; `fillo_form_insights` needs `forms:read` **and** `responses:read` |
100
+ | Webhooks | `fillo_list_webhooks`, `fillo_add_webhook`, `fillo_update_webhook`, `fillo_remove_webhook` | `webhooks:manage` |
101
+ | Workspace | `fillo_rename_workspace`, `fillo_rename_project`, `fillo_get_branding`, `fillo_set_branding`, `fillo_list_members`, `fillo_invite_member`, `fillo_change_member_role`, `fillo_remove_member` | `workspace:manage`, `members:manage` |
102
+ | Credentials | `fillo_list_tokens`, `fillo_revoke_token`, `fillo_list_sync_tokens`, `fillo_create_sync_token`, `fillo_revoke_sync_token`, `fillo_list_api_keys`, `fillo_revoke_api_key`, `fillo_list_agents`, `fillo_revoke_agent` | `workspace:manage` |
103
+ | Developer settings | `fillo_get_code_sync_policy`, `fillo_set_code_sync_policy`, `fillo_get_origins`, `fillo_set_origins`, `fillo_identity_status`, `fillo_enable_identity`, `fillo_disable_identity` | `workspace:manage` |
104
+
105
+ `fillo_delete_form`, `fillo_get_branding`, `fillo_set_branding`,
106
+ `fillo_list_api_keys`, and `fillo_revoke_api_key` need a login token — there is
107
+ no project-API-key route for them, so a leaked key can never enumerate or revoke
108
+ the workspace's credentials. `fillo_delete_response` needs one too, for a
109
+ different reason: its scoped route takes no typed confirmation, so on a project
110
+ API key the confirmation would be checked only by the caller, which is no
111
+ confirmation at all.
112
+
113
+ A webhook's target URL is a credential — the path of a Zapier catch hook or an
114
+ n8n webhook is what authorizes posting to it — so `fillo_delivery_status` names
115
+ destinations without spelling them out: connector-owned hooks come back as
116
+ "Zapier" or "n8n", and other webhooks as their host plus a short fingerprint of
117
+ the path. Read the full URL in the dashboard's Activity page.
118
+
119
+ ### The human layer
120
+
121
+ Routine, reversible actions run on the credential alone. Two kinds do not:
122
+
123
+ - **Outward** — unpublishing, starting a third-party destination, adding a
124
+ webhook, releasing or re-sending responses, inviting a member or changing a
125
+ role, a code-sync policy, the allowed origins, or identity verification. These
126
+ take `confirm: true`, and the tool refuses without it with a message telling
127
+ the model to ask a person first. Nothing has changed when it refuses.
128
+ Publishing is the exception on this server: `fillo_push_form` and
129
+ `fillo_publish_form` take no `confirm`, because a login token IS the person
130
+ who ran `fillo login` on this machine — the same reason `fillo publish` runs
131
+ without a flag. The hosted OAuth server, where the grant belongs to an agent
132
+ rather than to you, is what gates publishing behind an approval link.
133
+ - **Destructive** — deleting a form, a response, or a respondent, removing a
134
+ member or an integration account, disconnecting a provider or a Discord
135
+ server, revoking a token, sync token, API key, or MCP grant, turning identity
136
+ verification off. These take `confirm` as a
137
+ string that must equal the target exactly — a member's email, a token id, a
138
+ response id — and the server compares it, so a guess is a 409 that quotes the
139
+ value to retry with.
140
+
141
+ A secret Fillo mints once (a webhook signing secret, an `fsync_` token, an
142
+ identity-verification secret) is returned in that one tool result and never
143
+ again. Store it in a secret manager; it is never written to a log.
144
+
145
+ Write annotations use the conservative worst-case hint because a push can
146
+ replace draft state and a publish can replace the public schema, and
147
+ `openWorldHint` marks exactly the actions whose effect leaves the workspace.
148
+ Every tool is a thin wrapper over Fillo's public HTTP API — the server never
149
+ touches the database and imports no app code, so workspace scoping, rate limits,
150
+ authorization, and validation stay in one place.
88
151
 
89
152
  The three project tools are local-only and require the general token minted by
90
153
  `fillo login`. A project-specific handoff and a hosted remote-MCP OAuth grant