{"apiVersion":"v1","directorySlug":"upstreambehavioral-mcp-9bf9167c8d","title":"Upstream Behavioral","description":"Individualized, BCBA-led ABA therapy, caregiver coaching, and private BCBA exam tutoring. In-person in Brevard and Indian River County, FL; telehealth available nationwide.","pageUrl":"https://www.mcpbundles.com/skills/upstreambehavioral-mcp-9bf9167c8d","connectPath":"importable","connectAction":"import_server","catalogListing":false,"bundleSlug":null,"listingKind":"remote_mcp","kind":"provider","transportUrl":"https://upstreambehavioral.com/mcp","hostedMcpUrl":null,"toolCount":28,"toolInventoryStatus":"observed","refreshedAt":"2026-11-03T13:26:00.516172+00:00","registryName":"com.upstreambehavioral/upstreambehavioral-mcp-9bf9167c8d","registryVersion":"2026.11.3","registryEligible":true,"tools":[{"name":"oc_update_content_type","description":"Update an authored content type's display name and/or capability flags in its recipe file. Only the display name and the boolean flags can be changed; the technical name is immutable. Returns an error if no recipe file defines that type. Writes the recipe file only. Use when you need to change a type's display name or capability flags.","inputSchema":{"type":"object","required":["name"],"properties":{"name":{"type":"string"},"listable":{"type":["boolean","null"],"default":null},"creatable":{"type":["boolean","null"],"default":null},"draftable":{"type":["boolean","null"],"default":null},"securable":{"type":["boolean","null"],"default":null},"displayName":{"type":"string","default":""},"versionable":{"type":["boolean","null"],"default":null}}},"logicalName":"oc_update_content_type","displayName":"oc_update_content_type","title":"oc_update_content_type","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"oc_create_content_type","description":"Create a new content type by authoring its recipe file ({TypeName}.recipe.json). A part with the same technical name is attached to hold custom fields (add fields afterward with oc_add_field). The technical name must be alphanumeric or use the '__APP_NAMESPACE__' template (PascalCase recommended). Returns an error if a recipe file already defines a type with that name. This writes a file only; it does NOT change FormCloud until the recipe is deployed. When appName is provided, the file is create","inputSchema":{"type":"object","required":["name"],"properties":{"name":{"type":"string"},"appName":{"type":"string","default":""},"listable":{"type":"boolean","default":true},"creatable":{"type":"boolean","default":true},"draftable":{"type":"boolean","default":true},"securable":{"type":"boolean","default":true},"displayName":{"type":"string","default":""},"versionable":{"type":"boolean","default":false}}},"logicalName":"oc_create_content_type","displayName":"oc_create_content_type","title":"oc_create_content_type","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"get_user_profile","description":"Get a user profile by user ID or username","inputSchema":{"type":"object","required":["tenant","userIdOrName"],"properties":{"tenant":{"type":"string"},"userIdOrName":{"type":"string"}}},"logicalName":"get_user_profile","displayName":"get_user_profile","title":"get_user_profile","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"create_content_item","description":"Create a new content item. The dataJson should be a JSON object matching the content type structure.","inputSchema":{"type":"object","required":["tenant","contentType","dataJson"],"properties":{"tenant":{"type":"string"},"publish":{"type":"boolean","default":true},"dataJson":{"type":"string"},"contentType":{"type":"string"}}},"logicalName":"create_content_item","displayName":"create_content_item","title":"create_content_item","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"execute_lucene_query","description":"Execute a raw Lucene JSON query directly against an index","inputSchema":{"type":"object","required":["tenant","indexName","queryJson"],"properties":{"tenant":{"type":"string"},"indexName":{"type":"string"},"queryJson":{"type":"string"}}},"logicalName":"execute_lucene_query","displayName":"execute_lucene_query","title":"execute_lucene_query","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"query_content_items","description":"Query content items of a specific type with pagination","inputSchema":{"type":"object","required":["tenant","contentType"],"properties":{"page":{"type":"integer","default":1},"tenant":{"type":"string"},"pageSize":{"type":"integer","default":20},"contentType":{"type":"string"}}},"logicalName":"query_content_items","displayName":"query_content_items","title":"query_content_items","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"oc_add_part","description":"Add a content part to an authored type's recipe file. This attaches an existing part (like AutoroutePart, TitlePart, ListPart, or a custom part defined in another recipe file) to the type. Returns an error if the type doesn't exist or the part is already attached. Writes the recipe file only. Use when the type needs a standard part like TitlePart, AutoroutePart, or ListPart.","inputSchema":{"type":"object","required":["contentType","partName"],"properties":{"partName":{"type":"string"},"contentType":{"type":"string"}}},"logicalName":"oc_add_part","displayName":"oc_add_part","title":"oc_add_part","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"oc_get_content_type","description":"Get the full definition of a content type you have authored as a recipe file, including its capability flags and every field (name, field type, display name). Returns an error if no recipe file defines that type yet. Use when you need a type's full definition (fields, flags) before adding fields or parts.","inputSchema":{"type":"object","required":["name"],"properties":{"name":{"type":"string"}}},"logicalName":"oc_get_content_type","displayName":"oc_get_content_type","title":"oc_get_content_type","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"patch_content_item_fields","description":"Partially update specific fields of a content item without affecting other fields","inputSchema":{"type":"object","required":["tenant","contentType","contentItemId","fieldsJson"],"properties":{"tenant":{"type":"string"},"publish":{"type":"boolean","default":true},"fieldsJson":{"type":"string"},"contentType":{"type":"string"},"contentItemId":{"type":"string"}}},"logicalName":"patch_content_item_fields","displayName":"patch_content_item_fields","title":"patch_content_item_fields","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"oc_remove_part","description":"Remove a content part from an authored type's recipe file. This detaches the part (and its fields, if any) from the type. Returns an error if the type doesn't exist or the part is not attached. Writes the recipe file only. Use when an attached part is no longer needed.","inputSchema":{"type":"object","required":["contentType","partName"],"properties":{"partName":{"type":"string"},"contentType":{"type":"string"}}},"logicalName":"oc_remove_part","displayName":"oc_remove_part","title":"oc_remove_part","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"oc_batch_delete_items","description":"Batch delete multiple content items in ONE API call. Use when deleting 2+ items at once (e.g. bulk selection) instead of looping single deletes. idsJson is a JSON array of ContentItemId strings. Returns success with the affected ids.","inputSchema":{"type":"object","required":["contentType","idsJson"],"properties":{"idsJson":{"type":"string"},"publish":{"type":"boolean","default":true},"contentType":{"type":"string"}}},"logicalName":"oc_batch_delete_items","displayName":"oc_batch_delete_items","title":"oc_batch_delete_items","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"get_user_profiles","description":"Get user profiles for multiple users","inputSchema":{"type":"object","required":["tenant","userIdsOrNames"],"properties":{"tenant":{"type":"string"},"userIdsOrNames":{"type":"string"}}},"logicalName":"get_user_profiles","displayName":"get_user_profiles","title":"get_user_profiles","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"oc_set_content_type_access","description":"Set or remove per-content-type ROLE-BASED Create/Update/Delete access overrides for an authored content type. Writes/updates a {TypeName}.recipe.json.acl.json sidecar next to the type's recipe file; deploy merges it into the runtime manifest's Auth.ContentTypes and the app's /items endpoints enforce it PER TYPE after the app-level Create/Update/Delete gates. Each operation takes its OWN comma-separated role list (createRoles / updateRoles / deleteRoles) — the user must hold at least one of the l","inputSchema":{"type":"object","required":["name"],"properties":{"name":{"type":"string"},"appName":{"type":"string","default":""},"createRoles":{"type":"string","default":""},"deleteRoles":{"type":"string","default":""},"updateRoles":{"type":"string","default":""}}},"logicalName":"oc_set_content_type_access","displayName":"oc_set_content_type_access","title":"oc_set_content_type_access","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"oc_batch_update_items","description":"Batch update multiple content items in ONE API call. Use when updating 2+ items at once instead of looping single updates. itemsJson is a JSON array of FULL ContentItem JSON objects (each must include ContentItemId and ContentType). Returns per-item success/failure results.","inputSchema":{"type":"object","required":["contentType","itemsJson"],"properties":{"publish":{"type":"boolean","default":true},"itemsJson":{"type":"string"},"contentType":{"type":"string"}}},"logicalName":"oc_batch_update_items","displayName":"oc_batch_update_items","title":"oc_batch_update_items","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"delete_content_item","description":"Delete a content item","inputSchema":{"type":"object","required":["tenant","contentType","contentItemId"],"properties":{"tenant":{"type":"string"},"contentType":{"type":"string"},"contentItemId":{"type":"string"}}},"logicalName":"delete_content_item","displayName":"delete_content_item","title":"delete_content_item","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"oc_update_field","description":"Update an existing field's display name and/or settings on an authored content type. Both displayName and settings are optional — only the values you provide will be changed. Settings is a JSON object of key/value pairs to merge into the field's Settings node. Use when you need to change a field's display name, make a TextField multi-line, configure a ContentPickerField's allowed types, etc. Returns an error if the type or field doesn't exist. Writes the recipe file only.","inputSchema":{"type":"object","required":["contentType","fieldName"],"properties":{"fieldName":{"type":"string"},"contentType":{"type":"string"},"displayName":{"type":"string","default":""},"settingsJson":{"type":"string","default":""}}},"logicalName":"oc_update_field","displayName":"oc_update_field","title":"oc_update_field","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"update_content_item","description":"Update an existing content item","inputSchema":{"type":"object","required":["tenant","contentType","contentItemId","dataJson"],"properties":{"tenant":{"type":"string"},"publish":{"type":"boolean","default":true},"dataJson":{"type":"string"},"contentType":{"type":"string"},"contentItemId":{"type":"string"}}},"logicalName":"update_content_item","displayName":"update_content_item","title":"update_content_item","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"oc_remove_field","description":"Remove a field from an authored content type by editing its recipe file. The field is removed from the type's same-named part. Returns an error if no recipe file defines the type or the field is not present. Writes the recipe file only. Use when a detail is no longer needed on a record type.","inputSchema":{"type":"object","required":["contentType","fieldName"],"properties":{"fieldName":{"type":"string"},"contentType":{"type":"string"}}},"logicalName":"oc_remove_field","displayName":"oc_remove_field","title":"oc_remove_field","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"oc_list_live_content_types","description":"READ-ONLY reference: list the content types that already exist LIVE in FormCloud for the current tenant (technical name, display name, parts, capability flags). Use when you need to avoid duplicating existing types and to match existing field types before authoring a recipe. This does not change anything.","inputSchema":{"type":"object","properties":{}},"logicalName":"oc_list_live_content_types","displayName":"oc_list_live_content_types","title":"oc_list_live_content_types","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"oc_get_live_content_type","description":"READ-ONLY reference: get the full LIVE definition of a single content type in FormCloud, including its parts and every field. Use when you need to copy an existing live type's shape into a recipe. Returns an error if the type does not exist live. This does not change anything.","inputSchema":{"type":"object","required":["name"],"properties":{"name":{"type":"string"}}},"logicalName":"oc_get_live_content_type","displayName":"oc_get_live_content_type","title":"oc_get_live_content_type","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"oc_delete_content_type","description":"Delete an authored content type by removing it (and its same-named part) from its recipe file. If it was the only type in that file, the recipe file is deleted. Returns an error if no recipe file defines the type. This only edits/removes a recipe file; live FormCloud content is not touched until a recipe is deployed. Use when a record type is obsolete and should be removed from its recipe.","inputSchema":{"type":"object","required":["name"],"properties":{"name":{"type":"string"}}},"logicalName":"oc_delete_content_type","displayName":"oc_delete_content_type","title":"oc_delete_content_type","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"get_content_item","description":"Get a content item by its ID and content type","inputSchema":{"type":"object","required":["tenant","contentType","contentItemId"],"properties":{"tenant":{"type":"string"},"contentType":{"type":"string"},"contentItemId":{"type":"string"}}},"logicalName":"get_content_item","displayName":"get_content_item","title":"get_content_item","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"oc_list_content_types","description":"List all content types you have AUTHORED as recipe files in the current tenant. Returns each type's technical name, display name, the recipe file that defines it, how many fields it has, and its per-type Create/Update/Delete access overrides (Inherit = no override). Use when you need to see what has already been modelled in the recipe workspace. (For types that already exist live in FormCloud, use oc_list_live_content_types instead.)","inputSchema":{"type":"object","properties":{}},"logicalName":"oc_list_content_types","displayName":"oc_list_content_types","title":"oc_list_content_types","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"search_content_items","description":"Search for content items by text, optionally filtering by content types","inputSchema":{"type":"object","required":["tenant","searchText"],"properties":{"tenant":{"type":"string"},"maxResults":{"type":"integer","default":20},"searchText":{"type":"string"},"contentTypes":{"type":"string","default":""}}},"logicalName":"search_content_items","displayName":"search_content_items","title":"search_content_items","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"list_tenants","description":"List all available tenant names in the system","inputSchema":{"type":"object","properties":{}},"logicalName":"list_tenants","displayName":"list_tenants","title":"list_tenants","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"oc_add_field","description":"Add a field to an authored content type by editing its recipe file. The field is added to the type's same-named part. Allowed field types: TextField, BooleanField, NumericField, DateTimeField, DateField, TimeField, HtmlField, MarkdownField, MultiTextField, ContentPickerField, LinkField, MediaField. Returns an error if no recipe file defines the type, the field type is not allowed, or a field with that name already exists. Writes the recipe file only. Use when you need to add a detail to a record","inputSchema":{"type":"object","required":["contentType","fieldName","fieldType"],"properties":{"fieldName":{"type":"string"},"fieldType":{"type":"string"},"contentType":{"type":"string"},"displayName":{"type":"string","default":""}}},"logicalName":"oc_add_field","displayName":"oc_add_field","title":"oc_add_field","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"oc_batch_create_items","description":"Batch create multiple content items in ONE API call. Use when creating 2+ items at once instead of looping single creates. itemsJson is a JSON array of body objects: [{ContentType, DisplayText, TitlePart: {Title}, ...}]. Returns per-item success/failure results (some items may fail while others succeed).","inputSchema":{"type":"object","required":["contentType","itemsJson"],"properties":{"publish":{"type":"boolean","default":true},"itemsJson":{"type":"string"},"contentType":{"type":"string"}}},"logicalName":"oc_batch_create_items","displayName":"oc_batch_create_items","title":"oc_batch_create_items","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"execute_named_query","description":"Execute a named Lucene query with parameters. Returns content items matching the query.","inputSchema":{"type":"object","required":["tenant","queryName","parametersJson"],"properties":{"tenant":{"type":"string"},"queryName":{"type":"string"},"parametersJson":{"type":"string"}}},"logicalName":"execute_named_query","displayName":"execute_named_query","title":"execute_named_query","annotations":{"untrustedContentHint":true,"readOnlyHint":true}}],"toolSource":"directory_preview","agentAction":"both","installLinks":[{"id":"cursor","label":"Cursor","href":"cursor://anysphere.cursor-deeplink/mcp/install?name=Upstream-Behavioral&config=eyJ1cmwiOiAiaHR0cHM6Ly91cHN0cmVhbWJlaGF2aW9yYWwuY29tL21jcCJ9"},{"id":"vscode","label":"VS Code","href":"vscode:mcp/install?%7B%22name%22%3A%22Upstream-Behavioral%22%2C%22type%22%3A%22http%22%2C%22url%22%3A%22https%3A%2F%2Fupstreambehavioral.com%2Fmcp%22%7D"},{"id":"vscode-insiders","label":"VS Code Insiders","href":"vscode-insiders:mcp/install?%7B%22name%22%3A%22Upstream-Behavioral%22%2C%22type%22%3A%22http%22%2C%22url%22%3A%22https%3A%2F%2Fupstreambehavioral.com%2Fmcp%22%7D"},{"id":"claude-web","label":"Claude.ai","href":"https://claude.ai/customize/connectors?modal=add-custom-connector&connectorName=Upstream+Behavioral&connectorUrl=https%3A%2F%2Fupstreambehavioral.com%2Fmcp"},{"id":"codex","label":"Codex","copyText":"codex mcp add \"Upstream-Behavioral\" --url \"https://upstreambehavioral.com/mcp\""},{"id":"chatgpt","label":"ChatGPT","href":"https://www.mcpbundles.com/docs/integrations/chatgpt"}],"catalogUrl":"https://www.mcpbundles.com/api/directory/v1/servers/upstreambehavioral-mcp-9bf9167c8d","callUrl":"https://www.mcpbundles.com/api/directory/v1/servers/upstreambehavioral-mcp-9bf9167c8d/tools/{tool}","mcpServerUrl":"https://upstreambehavioral.com/mcp","liveCatalogUrl":"https://www.mcpbundles.com/api/directory/v1/servers/upstreambehavioral-mcp-9bf9167c8d?live=1"}