Why Does OpenAI Only See the First 10 Tools of Any App in the Pipedream MCP Call?

This topic was automatically generated from Slack. You can find the original thread here.

Hi Pipedream folks,

I need some help troubleshooting an issue. When I load the Pipedream MCP in a call to OpenAI Responses API, it looks as if OpenAI only sees the first 10 tools of any app in their tool list calls.

I am trying to find out whether this is OpenAI behavior or Pipedream behavior, so I can investigate further how to mitigate.

Who can help me? Happy to share a few examples.

I see the same issue when testing via chat.pipedream.com both with Claude and OpenAI.

any chance I can get some urgent attention on this? It is blocking me from migrating from Pipedream API to Pipedream MCP.

The LLM says it’s not cut off because of pagination.

Looking in the connector settings, it also says 11 tools there. But on https://mcp.pipedream.com/app/hubspot it says 104 tools.

I have filed a bug report for this now:

Are you using mcp /v3?

Yes

I’m pretty sure this is actually intentional - /v3 only surfaces the tools that were optimized for agent use (in HubSpot’s case)

The majority of HubSpot’s tools don’t work at all in tools-only mode, which v3 uses, due to having dynamic props

And a large majority of them are also strictly superseded by this set, i.e. “create deal”, “create lead”, “create task” etc. are all covered by the new “create CRM object”

But if you can pinpoint any specific tools that you need to use and are not available in MCP v3, please let us know - this is an ongoing improvement we’re trying to make to MCP compatibility.

I see. How can I determine whether a tool is available in /v3 or not? I don’t want to give our users expectations that we cannot meet, in terms of capabilities.

As of right now, the tools I am looking for are the ones related to Hubspot’s blogging features.

Is this an effort I can help with somehow? I’d be happy to contribute to individual v3 migrations whenever I come across tools that are not yet migrated.

I don’t have all that info right now - but I’ll check with the team on it and let you know.

Thank you!

Any update, ?

I also have a follow-up question. In my MCP headers, I am defining "x-pd-registry": "all" but the MCP does not seem to pick up my private components. How do I resolve that?

I took a look at one of the components we need from HubSpot:

hubspot-create-blog-post

As far as I can see it does not have any dynamic props. At least not if the definition of a dynamic prop is that it will have a reloadProps=true value.

Here’s the component’s props as per your own API:

{
  "data": {
    "name": "Create Blog Post",
    "description": "Creates a new blog post in HubSpot. [See the documentation](https://developers.hubspot.com/docs/api-reference/cms-posts-v3/basic/post-cms-v3-blogs-posts)",
    "component_type": "action",
    "version": "0.0.5",
    "key": "hubspot-create-blog-post",
    "annotations": {
      "readOnlyHint": false,
      "openWorldHint": true,
      "destructiveHint": false
    },
    "configurable_props": [
      {
        "name": "hubspot",
        "type": "app",
        "app": "hubspot"
      },
      {
        "name": "name",
        "type": "string",
        "label": "Name",
        "description": "The internal name of the blog post"
      },
      {
        "name": "language",
        "type": "string",
        "label": "Language",
        "description": "The language of the blog post",
        "options": [],
        "optional": false
      },
      {
        "name": "slug",
        "type": "string",
        "label": "Slug",
        "description": "The URL slug of the blog post",
        "optional": false
      },
      {
        "name": "metaDescription",
        "type": "string",
        "label": "Meta Description",
        "description": "The meta description of the blog post",
        "optional": false
      },
      {
        "name": "postBody",
        "type": "string",
        "label": "Post Body",
        "description": "The HTML content of the blog post",
        "optional": false
      },
      {
        "name": "postSummary",
        "type": "string",
        "label": "Post Summary",
        "description": "A summary of the blog post",
        "optional": false
      },
      {
        "name": "htmlTitle",
        "type": "string",
        "label": "HTML Title",
        "description": "The HTML title tag for the blog post",
        "optional": false
      },
      {
        "name": "featuredImage",
        "type": "string",
        "label": "Featured Image",
        "description": "The URL of the featured image for the blog post",
        "optional": false
      },
      {
        "name": "featuredImageAltText",
        "type": "string",
        "label": "Featured Image Alt Text",
        "description": "The alt text for the featured image",
        "optional": false
      },
      {
        "name": "useFeaturedImage",
        "type": "boolean",
        "label": "Use Featured Image",
        "description": "Whether to use a featured image for the blog post",
        "optional": false
      },
      {
        "name": "authorName",
        "type": "string",
        "label": "Author Name",
        "description": "The name of the blog post author",
        "optional": false
      },
      {
        "name": "blogAuthorId",
        "type": "string",
        "label": "Blog Author ID",
        "description": "The ID of the blog post author",
        "remoteOptions": true,
        "optional": false
      },
      {
        "name": "contentGroupId",
        "type": "string",
        "label": "Content Group ID (Blog ID)",
        "description": "The ID of the blog (content group) this post belongs to",
        "remoteOptions": true,
        "optional": false
      },
      {
        "name": "publishDate",
        "type": "string",
        "label": "Publish Date",
        "description": "The publish date for the blog post. Format: YYYY-MM-DDTHH:MM:SSZ",
        "optional": false
      },
      {
        "name": "headHtml",
        "type": "string",
        "label": "Head HTML",
        "description": "Custom HTML to be added to the head section",
        "optional": false
      },
      {
        "name": "footerHtml",
        "type": "string",
        "label": "Footer HTML",
        "description": "Custom HTML to be added to the footer section",
        "optional": false
      },
      {
        "name": "enableGoogleAmpOutputOverride",
        "type": "boolean",
        "label": "Enable Google AMP Output Override",
        "description": "Override the AMP settings for this specific post",
        "optional": false
      },
      {
        "name": "password",
        "type": "string",
        "label": "Password",
        "description": "Password required to view the blog post",
        "optional": false
      }
    ]
  }
}

What, in this component makes it ineligible/invisible to the MCP v3?

I would really appreciate some urgent feedback and guidance on this, as the uncertainty around this topic is currently blocking a major upgrade on our end. We can’t complete that upgrade, if we don’t know exactly:
• which tools are currently available via MCP (across all apps), and
• how to deploy custom components that will be accessible via MCP
Happy to hop on a call, if it’s easier to provide feedback that way!

As I said before, we have ongoing work to improve this.

Currently, MCP v3 returns only the tools specifically designed to be agent-optimized for apps that have them (on top of filtering out any tools with additionalProps). For HubSpot, these are:

hubspot-get-user-details
hubspot-search-properties
hubspot-get-properties
hubspot-search-crm-objects
hubspot-get-crm-objects
hubspot-create-crm-object
hubspot-update-crm-object
hubspot-create-association
hubspot-list-owners
hubspot-list-pipelines-and-stages

We’re also looking into the behavior for custom components, which are currently also filtered out if made for an app such as HubSpot.

Right now, if you urgently need to work with other tools in HubSpot, I’d recommend using MCP v2 instead to allow that flexibility.

Does that mean if I publish a custom tool that does not use additionalProps it would be available to me in the MCP?

According to this link I can publish custom tools to the MCP. Is that not accurate?

Also, can you point me to a page where the v2 MCP is documented? I can’t seem to find that anymore.

Yea as I explained above, we’re working on adjusting this - right now, if you need to use a custom tool for HubSpot, you’ll need to use MCP v2