📚 Tape MCP Server Documentation

Complete guide to using the Tape MCP Server with 46 tools (context-optimized)

📋 Quick Navigation

🚀 Getting Started

Step 1: Get Your Coupon Code

Contact Syncrony to receive your beta access coupon code. This is a one-time setup step.

Step 2: Get Your Tape API Key

  1. Log into Tape
  2. Click your avatar in the top-right corner
  3. Go to Preferences → API
  4. Copy your API key (starts with user_key_)

Step 3: Generate Your JWT Token

  1. Visit https://tapemcp.syncrony.ca/
  2. Enter your coupon code
  3. Enter your Tape API key
  4. Click "Generate Access Token"
  5. Copy the JWT token from the success page
Important: JWT tokens expire after 7 days. Return to generate a new token when needed using the same coupon code.

⚡ Rate Limiting & Usage Control

The Tape MCP Server enforces rate limits to ensure fair usage and protect server resources:

Per-Minute Rate Limiting

Default: 60 requests per minute

Uses a sliding window algorithm - if you make more than 60 tool calls within any 60-second period, additional requests will be blocked with a 429 error until the window resets.

Monthly Usage Limits

Default: 10,000 tool calls per month

Your monthly allowance resets automatically on the first day of each month. When you reach your monthly limit, all tool calls will be blocked until the next month.

What Counts Against Your Limits

ALL tool calls count, including:
• ✅ Successful tool calls
• ✅ Failed tool calls (errors, invalid parameters, etc.)
• ✅ Rate limit status checks (getRateLimitInfo)

This prevents abuse through repeated failed requests and ensures accurate usage tracking.

Checking Your Usage

Use the getRateLimitInfo tool to check your current usage:

💬 "Check my rate limit status"
💬 "How many tool calls have I made this month?"

The tool returns:

Rate Limit Errors

If you hit a rate limit, you'll receive a structured error response:

Per-minute limit exceeded:

{
  "success": false,
  "status_code": 429,
  "error": "Rate limit exceeded",
  "details": {
    "requestsThisMinute": 60,
    "ratePerMinute": 60,
    "resetIn": "23 seconds"
  }
}

Monthly limit exceeded:

{
  "success": false,
  "status_code": 429,
  "error": "Monthly limit exceeded",
  "details": {
    "monthlyToolCalls": 10000,
    "monthlyLimit": 10000,
    "resetsOn": "2025-12-01T00:00:00Z"
  }
}
Connection-Time Blocking: Users over their monthly limit are blocked at connection time to prevent wasted connection overhead.

⚙️ Configuration

Requirements: Node.js 18 or higher is required. Check your version with node --version

For Claude Code

Create or edit .mcp.json in your project:

{
  "mcpServers": {
    "tape": {
      "type": "http",
      "url": "https://tapemcp.syncrony.ca/mcp",
      "headers": {
        "Authorization": "Bearer YOUR_JWT_TOKEN_HERE"
      }
    }
  }
}

For Claude Desktop

macOS: ~/Library/Application Support/Claude/claude_desktop_config.json

Windows: %APPDATA%\Claude\claude_desktop_config.json

{
  "mcpServers": {
    "tape": {
      "command": "npx",
      "args": [
        "-y",
        "mcp-remote",
        "https://tapemcp.syncrony.ca/mcp",
        "--header",
        "Authorization: Bearer YOUR_JWT_TOKEN_HERE"
      ]
    }
  }
}
Note: Claude Desktop requires the mcp-remote package to connect to hosted MCP servers. This will be installed automatically via npx when Claude Desktop starts.

🛠️ All Available Tools

The Tape MCP Server provides 55 tools organized into 7 categories for comprehensive Tape API access.

1. Connection & Information 4 tools

testConnection

Description: Verify your API key is working and you can connect to Tape

Parameters: None
💬 Example: "Test my Tape connection"

getServerInfo

Description: View server version, capabilities, and available tool count

Parameters: None
💬 Example: "What version of the Tape MCP server am I using?"

getTapeHelp

Description: Query built-in documentation about field types, filters, calculations, and API patterns

Parameters:
topic (string, required) - Topic to get help on (e.g., "field_types", "filters", "calculations")
💬 Example: "What field types are available in Tape?"

getRateLimitInfo

Description: Get current rate limit and usage status for your account

Parameters: None
Returns:
userId - Your user ID
requestsThisMinute - Current requests in sliding window
minuteWindowStart - When current window started
currentMonth - Current month (YYYY-MM)
monthlyToolCalls - Tool calls made this month
monthlyLimit - Your monthly limit (default: 10,000)
ratePerMinute - Per-minute rate limit (default: 60)
💬 Example: "Check my current usage and rate limits"

2. Workspace Management 8 tools

listWorkspaces

Description: List all workspaces you have access to

Parameters: None
💬 Example: "Show me all my workspaces"

getWorkspace

Description: Retrieve a single workspace by workspace_id (convenience wrapper)

Parameters:
workspace_id (number, required) - Workspace ID to retrieve
💬 Example: "Get details for workspace 5524"

createWorkspace

Description: Create a new workspace

Parameters:
name (string, required) - Workspace name
type (string, required) - One of: "private", "open", "default", "closed"
description (string, optional) - Workspace description
💬 Example: "Create a new private workspace called 'Sales Team'"

updateWorkspace

Description: Update workspace properties

Parameters:
workspace_id (number, required) - Workspace ID to update
name (string, optional) - New name
description (string, optional) - New description
💬 Example: "Rename workspace 15872 to 'Marketing Hub'"

deleteWorkspace

Description: Permanently delete a workspace

Parameters:
workspace_id (number, required) - Workspace ID to delete
💬 Example: "Delete workspace 15872"

listWorkspaceMembers

Description: View all members of a workspace

Parameters:
workspace_id (number, required) - Workspace ID
💬 Example: "Show me all members of workspace 15872"

addWorkspaceMember

Description: Add a user to a workspace or update their role

Parameters:
workspace_id (number, required) - Workspace ID
user_id (number, required) - User ID to add
role (string, required) - Role to assign
💬 Example: "Add user 1406 to workspace 15872 as an admin"

removeWorkspaceMember

Description: Remove a user from a workspace

Parameters:
workspace_id (number, required) - Workspace ID
user_id (number, required) - User ID to remove
💬 Example: "Remove user 1406 from workspace 15872"

3. App Management 9 tools

Context Optimization: Consolidated from 17 tools to 9 tools with flexible parameter-based interfaces.

Basic Operations

listApps

Description: List all apps. Optionally filter by workspace or return summary only (app_id, workspace_id, name).

Parameters:
workspace_id (number, optional) - Filter by workspace
summary_only (boolean, optional) - Return only app_id, workspace_id, and name
💬 Examples:
• "Show me all my apps"
• "List apps in workspace 15872"
• "List all apps with just IDs and names"

getApp

Description: Get app information with flexible options for field retrieval

Parameters:
app_id (number, required) - App ID
include_fields (boolean, optional) - Include fields array (default true)
field_type_filter (string, optional) - Filter fields: 'all', 'basic', or 'calculation'
fields_summary_only (boolean, optional) - Return only field_id, external_id, label, and field_type
fields_limit (number, optional) - Max fields to return (pagination)
fields_offset (number, optional) - Number of fields to skip (pagination)
Use Cases:
include_fields: false → Get app metadata without fields (was getAppSummary)
field_type_filter: 'basic' → Get non-calculation fields (was getBasicAppFields)
field_type_filter: 'calculation' → Get only calculation fields (was getCalculationFields)
fields_summary_only: true → Get simplified field info
fields_limit + fields_offset → Paginate through fields (was getAppFields with pagination)
💬 Examples:
• "Get app 61022 without fields"
• "Get only basic fields from app 61022"
• "Get first 20 fields from app 61022"

getField

Description: Get a single field by label, field_id, or external_id

Parameters:
app_id (number, required) - App ID containing the field
label (string, optional) - Field label (case-insensitive)
field_id (number, optional) - Field ID
external_id (string, optional) - External ID

Note: Must provide one of: label, field_id, or external_id
💬 Examples:
• "Find the 'Customer Name' field in app 61022"
• "Get field 575851 from app 56564"
• "Get field with external_id 'first_name' from app 56564"

getAppViews

Description: Get all team views for an app

Parameters:
app_id (number, required) - App ID
💬 Example: "Show me all views for app 61022"

createApp

Description: Create a new app with basic fields

Parameters:
workspace_id (number, required) - Workspace to create in
name (string, required) - App name
item_name (string, required) - Singular name for records
description (string, optional) - App description
fields (array, optional) - Field definitions
💬 Example: "Create a Contacts app in workspace 15872"

updateApp

Description: Update app properties and fields with intelligent field merging

Parameters:
app_id (number, required) - App ID to update
updates (object, required) - Properties to update
return_full_response (boolean, optional) - Default: false (returns summary)
Options:
return_full_response: false (default) - Returns compact summary
return_full_response: true - Returns full app object
💬 Example: "Add a 'Phone Number' field to app 56564"

deleteApp

Description: Permanently delete an app

Parameters:
app_id (number, required) - App ID to delete
💬 Example: "Delete app 61022"

Field Management

addRelationshipField

Description: Add a single relationship field with automatic app_id resolution

Parameters:
app_id (number, required) - App to add field to
field_config (object, required) - Field configuration
Validation: Verifies all referenced apps exist before creating the field
💬 Example: "Add a relationship field to Companies that links to Contacts app"

addCalculationField

Description: Add a single calculation field with comprehensive validation

Parameters:
app_id (number, required) - App to add field to
field_config (object, required) - Field configuration
Validation:
• Validates script syntax (no return at start/end)
• Verifies all field_id references exist
• Checks referenced fields aren't restricted types
💬 Example: "Add a calculation field that sums all related invoice amounts"

deleteAppFields

Description: Delete specific fields from an app

Parameters:
app_id (number, required) - App ID
field_ids (array, required) - Array of field IDs to delete
💬 Example: "Delete field 575853 from app 56564"

updateAppFieldOrder

Description: Reorder fields within an app

Parameters:
app_id (number, required) - App ID
field_ids (array, required) - Array of field IDs in desired order
count_only (boolean, optional) - Return only count confirmation
💬 Example: "Reorder fields and just confirm it worked"

4. Record Operations 14 tools

Basic CRUD

getRecord

Description: Fetch a complete record with all field values

Parameters:
record_id (number, required) - Record ID
field_ids (array, optional) - Specific fields to include
field_values_only (boolean, optional) - Return only fields array
💬 Example: "Get record 146325573 with only name fields"

listRecords

Description: List all records in an app with pagination

Parameters:
app_id (number, required) - App ID
limit (number, optional) - Max records (default 30)
cursor (string, optional) - Pagination cursor
count_only (boolean, optional) - Return only count
field_ids (array, optional) - Specific fields to include
field_values_only (boolean, optional) - Return only fields arrays
💬 Example: "How many contacts are in app 56564?"

getRecordsByView

Description: Retrieve records from a specific view

Parameters:
view_id (number, required) - View ID
limit (number, optional) - Max records
cursor (string, optional) - Pagination cursor
count_only (boolean, optional) - Return only count
field_ids (array, optional) - Specific fields to include
field_values_only (boolean, optional) - Return only fields arrays
💬 Example: "Get records from view 12345 with only key fields"

createRecord

Description: Create a new record

Parameters:
app_id (number, required) - App ID to create in
fields (object, required) - Field values as {field_id: {value: ...}}
Tip: For Category/Status fields, you can use either option IDs (numbers) or text values (strings). No need to fetch option IDs!
💬 Example: "Create a contact with first name 'John' and last name 'Doe'"

updateRecord

Description: Update an existing record

Parameters:
record_id (number, required) - Record ID to update
fields (object, required) - Field values to update
💬 Example: "Update record 146325573 to change the phone number"

deleteRecord

Description: Move a record to trash (soft delete)

Parameters:
record_id (number, required) - Record ID to delete
💬 Example: "Delete record 146325573"

restoreRecord

Description: Restore a deleted record from trash

Parameters:
record_id (number, required) - Record ID to restore
💬 Example: "Restore record 146325573"

Advanced Operations

filterRecords

Description: Filter records with complex criteria and sorting

Parameters:
app_id (number, required) - App ID to filter
filters (array, required) - Filter definitions
limit (number, optional) - Max records (default 30)
cursor (string, optional) - Pagination cursor
sort_by (string, optional) - External ID to sort by
sort_desc (boolean, optional) - Sort descending
count_only (boolean, optional) - Return only count
field_ids (array, optional) - Specific fields to include
field_values_only (boolean, optional) - Return only fields arrays
Filter Validation: All filters are validated before making API calls - checks field types, data types, and match types!
💬 Example: "Find all contacts where first name is 'Andrew'"

batchCreateRecords

Description: Create up to 50 records in a single operation

Parameters:
app_id (number, required) - App ID
records (array, required) - Array of field objects (max 50)
summary_only (boolean, optional) - Return only count
💬 Example: "Create 10 test contacts and just tell me it worked"

batchUpdateRecords

Description: Update up to 50 records in a single operation

Parameters:
app_id (number, required) - App containing records
updates (array, required) - Array of {record_id, fields} objects (max 50)
summary_only (boolean, optional) - Return only count
💬 Example: "Update 20 records to mark them as inactive"

getRelatedRecords

Description: Fetch records from a related app via relationship fields

Parameters:
app_id (number, required) - App with relationship field
related_app_id (number, required) - Related app to get records from
record_ids (array, required) - Array of record IDs
direction (string, optional) - Direction of relations
field_ids (array, optional) - Specific fields to include
field_values_only (boolean, optional) - Return only fields arrays
💬 Example: "Get all contacts related to company record 123"

findRelatableRecords

Description: Search for records that can be related to a specific relation field

Parameters:
field_id (number, required) - ID of the relation field
text (string, required) - Search text
field_ids (array, optional) - Specific fields to include
field_values_only (boolean, optional) - Return only fields arrays
💬 Example: "Find contacts that can be related to this company"

getRecordRevisions

Description: View complete revision history for a record

Parameters:
record_id (number, required) - Record ID
💬 Example: "Show revision history for record 146325573"

getRecordRevisionDelta

Description: See changes between specific revisions

Parameters:
record_id (number, required) - Record ID
to_revision_id (number, required) - Revision to compare to
💬 Example: "Show what changed in revision 5 of record 146325573"

5. Record Comments 4 tools

createRecordComment

Description: Add a comment to a record

Parameters:
record_id (number, required) - Record ID
value (string, required) - Comment text
file_ids (array, optional) - Array of file IDs to attach
silent (boolean, optional) - If true, no notifications sent
hook (boolean, optional) - If false, webhooks not triggered
💬 Example: "Add a comment to record 146325573 saying 'Called customer today'"

getRecordComment

Description: Retrieve details of a specific comment

Parameters:
comment_id (number, required) - Comment ID
💬 Example: "Get comment 123456"

listRecordComments

Description: List all comments on a record

Parameters:
record_id (number, required) - Record ID
limit (number, optional) - Max comments (default 30)
cursor (string, optional) - Pagination cursor
💬 Example: "Show all comments on record 146325573"

deleteRecordComment

Description: Remove a comment from a record

Parameters:
comment_id (number, required) - Comment ID to delete
silent (boolean, optional) - If true, no notifications sent
hook (boolean, optional) - If false, webhooks not triggered
💬 Example: "Delete comment 123456"

6. Webhook Management 5 tools

listWebhooks

Description: View all webhooks configured for an app

Parameters:
app_id (number, required) - App ID
💬 Example: "Show webhooks for app 61022"

createWebhook

Description: Create a new webhook

Parameters:
app_id (number, required) - App ID
url (string, required) - Webhook URL
event_types (array, required) - Events to subscribe to
Supported Events:
record.create - Triggered when records are created
record.update - Triggered when records are modified
record.delete - Triggered when records are deleted
💬 Example: "Create a webhook for app 61022 that posts to https://example.com/hook on record updates"

requestWebhookVerification

Description: Request verification code for a webhook

Parameters:
hook_id (number, required) - Webhook ID
💬 Example: "Request verification for webhook 789"

validateWebhookVerification

Description: Activate webhook with verification code

Parameters:
hook_id (number, required) - Webhook ID
code (string, required) - Verification code received
💬 Example: "Validate webhook 789 with code ABC123"

deleteWebhook

Description: Permanently remove a webhook

Parameters:
hook_id (number, required) - Webhook ID to delete
💬 Example: "Delete webhook 789"

7. Organization & Permissions 2 tools

getOrganization

Description: Retrieve organization details

Parameters: None
💬 Example: "Show my organization details"

batchUpdateRecordPermissions

Description: Share records with users and manage access levels (up to 50 records per batch)

Parameters:
records (array, required) - Array of {record_id, permissions} objects
Permission Levels:
0 - No access (revoke)
1 - View only
2 - Comment
3 - Edit
4 - Delete
5 - Full access (manage permissions)
💬 Example: "Share record 146325573 with john@example.com at edit level (3)"

🔧 Troubleshooting

"Authentication failed" or "Invalid JWT token"

"Invalid coupon code"

"Forbidden" or "Access denied"

"Resource not found"

"Tool not found" or "MCP server not responding"

"ReadableStream is not defined" or "Server disconnected" (Claude Desktop)

💬 Need Help?

Version: 2.1.0
Last Updated: 2025-11-09
Server URL: https://tapemcp.syncrony.ca/sse
Authentication: JWT-based (7-day expiry)
Rate Limits: 60/minute, 10,000/month (default)