All notable changes to GravityKit MCP (formerly GravityMCP) will be documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
2.1.0 - 2026-03-31
- Checkbox field values created via MCP now use proper Gravity Forms dot-notation sub-inputs instead of JSON array strings. Values are matched against choices by value then text, with HTML entity decoding for ampersands. Closes #1
- Multiselect arrays normalized to comma-separated strings (REST API v2 format)
- Radio/select arrays take first element; list/chainedselect arrays pass through unchanged
- Hidden inputs (e.g., Select All) skipped during checkbox expansion
- Update entry correctly clears stale checkbox sub-inputs via fetch-then-merge
- Field registry: corrected storage definitions for checkbox (compound/dotNotation, not array/json), multiselect (commaSeparated, not json), consent (3 sub-inputs, not 2), chainedselect (compound, not single)
- Field registry: added variant-specific storage for product, option, post_category, post_custom_field, quiz, poll
- Field registry: added base
surveytype with all 8 inputType variants; moved hasChoices to variant level so text/textarea variants don't require choices - Field validation: fixed compound/array ordering so checkbox hits array branch (not compound) in getFieldValue, processSubmissionData, extractSubmissionValue
- Validation: removed unused imports, fixed validator name references, added JSON string→array parsing for MCP clients that serialize arrays as strings
_normalizeArrayValues()in GravityFormsClient: fetches form schema to match array values to correct sub-input IDs for all choice-based field types- 41 array normalization tests covering checkbox, multiselect, radio, select, option, quiz, poll, survey, post_category, post_custom_field, list, entry_tags, HTML entity decoding, and mixed-form scenarios
- 25 field registry tests verifying storage definitions and variant-specific overrides
- Compound field fallback: logs warning and stores as single value when subInput mapping is missing
2.0.0 - 2026-03-31
- Renamed project from GravityMCP to GravityKit MCP
- npm package:
@gravitykit/gravitymcp→@gravitykit/mcp - GitHub repo:
GravityKit/GravityMCP→GravityKit/MCP - MCP server name:
gravitymcp→gravitykit-mcp - CLI binary:
gravitymcp→gkmcp - Environment variable:
GRAVITYKIT_MCP_TEST_MODE(legacyGRAVITYMCP_TEST_MODEstill supported) - User-Agent header updated to
GravityKit MCP/2.0.0
- The old
@gravitykit/gravitymcpnpm package is published as a bridge that depends on@gravitykit/mcpwith a deprecation notice — existing installs continue working - GitHub auto-redirects old repo URL (
GravityKit/GravityMCP) to the new one GRAVITYMCP_TEST_MODEenvironment variable still works alongside newGRAVITYKIT_MCP_TEST_MODE
1.4.1 - 2026-03-20
- Race condition in concurrent fetch-then-merge updates: added per-resource mutex to serialize mutations on the same form/entry/feed
FieldManagerdouble-fetch eliminated: newreplaceForm()does direct PUT without re-fetching (3 HTTP calls → 2 per field op)console.logcalls in 7 files replaced withlogger.info/logger.warnto prevent JSON-RPC stdout corruptionmcp.jsonphantomgf_submit_formtool removed, 4 field operation tools added, version synced_variant/_metainternal metadata stripped from field objects before sending to API- Field operation errors now propagate to
wrapHandlerwithisError: trueinstead of being silently swallowed - Name field sub-input IDs corrected (
.2=prefix,.3=first, matching Gravity Forms) - Feature filter
conditionalnow maps to correct registry keysupportsConditionalLogic gf_delete_feeddescription now mentionsALLOW_DELETErequirement
ResourceMutexutility (utils/mutex.js) withacquire/releaseandwithLock()for safe concurrent operationsreplaceForm(formId, formData)client method for direct PUT without re-fetch- MCP tool annotations on all 26 tools (
readOnlyHint,destructiveHint,openWorldHint) - Server-level
instructionsstring documenting compact mode (sent once at session start) - 31 new tests: 22 bug regression tests + 9 mutex concurrency tests
- Tool descriptions stripped of repeated compact boilerplate (~130 tokens saved per
tools/listcall) compactproperty description shortened to "Return raw uncompacted data"
- Redundant
gf_list_form_feedstool (gf_list_feedswithform_iddoes the same thing plus addon filtering) - Deprecated
cryptoand unusedform-datanpm dependencies - False
batch_operations: trueclaim frommcp.json
1.4.0 - 2026-03-20
- Test mode environment resolution: when
GRAVITYMCP_TEST_MODE=true, the client automatically usesGRAVITY_FORMS_TEST_*env vars (base URL, consumer key/secret) instead of live credentials testConfig.resolveEnv()method inconfig/test-config.jsas the canonical place for environment resolution- Init log now shows
(TEST MODE)indicator when connecting to test site - Support for
GRAVITY_FORMS_TEST_BASE_URLenv var (in addition to existingGRAVITY_FORMS_TEST_URL)
- Removed 4 unused variable warnings (
responsein delete methods,safeHeadersin request interceptor)
1.3.0 - 2026-03-10
- Compact mode:
stripEmpty()recursively removesnulland""values from all responses to reduce token usage - Entry meta stripping: plugin-added meta keys (e.g.,
gv_revision_*,helpscout_conversation_id) are stripped by default viastripEntryMeta() - Pass
compact=falsefor full raw data
- Updated axios and MCP SDK to patch security vulnerabilities
1.1.0 - 2026-03-10
- Reduced token usage across all tool responses: no pretty-print, no redundant
messagestrings, no echo-back of input IDs - Updated AGENTS.md and CLAUDE.md for token optimization documentation
- Granted
contents:writepermission in publish CI workflow
1.0.5 - 2026-02-18
- Fixed OAuth signature generation in
validateRestApiAccessto pass full URL, method, and params togetAuthHeaders() - Fixed confirmations and notifications validation to accept objects keyed by ID instead of arrays, matching Gravity Forms' actual data format
- Added defensive optional chaining for
httpClient.defaults.baseURL
- Updated test helpers: added
defaults.baseURLto MockHttpClient - Updated test data and validation tests to use object format for confirmations and notifications
1.0.4 - 2025-01-13
- Comprehensive data sanitization for secure logging
- GitHub Actions workflows for automated testing and publishing
- Self-signed SSL certificate support for local development
- Auto-generate inputs array for compound fields in
gf_create_form - Load
.envfrom working directory with project fallback
- Updated CodeQL Action to v3
- Removed local Claude settings from version control
1.0.3 - 2024-12-09
- Renamed package from
gravity-mcptoGravityMCPfor consistency - Updated all documentation references to use new naming
- Improved Claude Desktop configuration example
- Removed obsolete rename script
- GitHub Actions workflow for automated npm publishing
- GitHub Actions workflow for continuous testing
1.0.2 - 2024-12-09
- Fixed logging for MCP and test modes
1.0.1 - 2024-12-09
- Initial release of GravityMCP
- Full Gravity Forms REST API v2 coverage
- 28 MCP tools for complete forms management
- OAuth 1.0a and Basic authentication support
- Advanced search and filtering capabilities
- File upload support
- Comprehensive test suite
- Dual environment configuration (test/production)
- Forms management (6 tools)
- Entries management (6 tools)
- Field operations (4 tools)
- Form submissions (2 tools)
- Add-on feeds (7 tools)
- Notifications (1 tool)
- Field filters (1 tool)
- Results/Analytics (1 tool)