Openhandle

Read public Instagram, TikTok, X, and Reddit profiles, posts, comments, and metrics through MCP.

Community: Submitted by a user or imported; check the owner before granting accessOnlineNo sign-inGlobalFreeCan modify data

What it can do

  • Find Test Data: Find stable synthetic inputs by platform, resource, operation, literal traits, expected status, error code, or text. This discovery call is unmetered.
  • Get Test Data: Get one synthetic catalog entry by its stable catalog ID. This discovery call is unmetered.
  • Instagram Comment Likers List: List comment likers from public Instagram data. The API key selects Test or Live. Test calls record a $0.000 actual charge and return the live-equivalent price. null mea

What data it sees

Do you need an account

No: the server works without sign-in

Read public Instagram, TikTok, X, and Reddit profiles, posts, comments, and metrics through MCP.

Connect agents with OAuth or an API key. Applications can also use the REST API. Choose live data or cached responses for creator analytics, influencer vetting, and social listening. Missing metrics remain null.

Pricing is prepaid and based on usage, with no subscription. Start with 100 real requests once, without a payment card, plus unlimited synthetic test requests. Live requests cost $0.0025 for the first 100,000 each month, then $0.002. Balance top-ups start at $10. Cached responses cost less; 30-day cache hits are free.

Setup guide | Documentation | Pricing

How to connect

How to connect Openhandle to Claude

The server address to paste into Claude settings:

https://openhandle--openhandle.run.tools

  1. Open Claude (claude.ai or the desktop app).
  2. Go to Settings → Connectors.
  3. Click Add custom connector.
  4. Paste the server address copied below into Remote MCP server URL and click Add.
  5. In a chat, click + → Connectors and switch the new connector on.

Custom connectors are available on Free, Pro, Max, Team and Enterprise plans (Free is limited to one). On Team and Enterprise an organization Owner adds the connector first under Organization settings → Connectors.

Authorization

After you click Add, a sign-in window for the service opens. Sign in with your own account and approve access. Claude never sees your password.

How to connect Openhandle to ChatGPT

The server address to paste into ChatGPT settings:

https://openhandle--openhandle.run.tools

  1. Open ChatGPT in a browser (chatgpt.com). A Plus, Pro, Business, Enterprise or Edu plan is required.
  2. Turn on developer mode once: Settings → Apps → Advanced settings → Developer mode.
  3. Open Settings → Connectors and click Create.
  4. Fill in the form: Name (anything), Description (one line about what the service does), MCP server URL (copy it below).
  5. Under Authentication choose OAuth if the service requires sign-in, otherwise None. Click Create.
  6. In a new chat open + → Apps/Connectors and enable the connector.

OpenAI has renamed this section before (Connectors → Apps/Plugins). If the label differs, search settings for "developer mode". On Business/Enterprise workspaces an admin must allow custom connectors first.

Authorization

On first use ChatGPT opens the service's sign-in window. Sign in and approve access.

How to connect Openhandle to Cursor

The server address to paste into Cursor settings:

https://openhandle--openhandle.run.tools

Fastest: click Open in Cursor below and confirm the prompt.

Manually:

  1. In Cursor open Settings → Cursor Settings → MCP and click Add new global MCP server.
  2. Paste the JSON copied below into ~/.cursor/mcp.json (per project: .cursor/mcp.json in the repo root).
  3. Save the file. The server appears in the MCP list; authorize it there if asked.

Authorization

If the service needs sign-in, an authorize button appears next to the server in the MCP list.

Server tool list (60)

Raw names from tools/list. Only developers need these.

find_test_dataFind stable synthetic inputs by platform, resource, operation, literal traits, expected status, error code, or text. This discovery call is unmetered.
get_test_dataGet one synthetic catalog entry by its stable catalog ID. This discovery call is unmetered.
instagram_comment_likers_listList comment likers from public Instagram data. The API key selects Test or Live. Test calls record a $0.000 actual charge and return the live-equivalent price. null means unavailable, not zero. Use find_test_data with operation=instagram.comment.likers.list for compatible synthetic input.
instagram_get_hashtagReturn one public hashtag by its native identifier. The API key selects Test or Live. Test calls record a $0.000 actual charge and return the live-equivalent price. null means unavailable, not zero. Use find_test_data with operation=instagram.hashtag.get for compatible synthetic input.
instagram_get_locationReturn one public location by its native identifier. The API key selects Test or Live. Test calls record a $0.000 actual charge and return the live-equivalent price. null means unavailable, not zero. Use find_test_data with operation=instagram.location.get for compatible synthetic input.
instagram_get_musicReturn one public music by its native identifier. The API key selects Test or Live. Test calls record a $0.000 actual charge and return the live-equivalent price. null means unavailable, not zero. Use find_test_data with operation=instagram.music.get for compatible synthetic input.
instagram_get_postGet a post by a canonical platform identifier. URLs must be converted before calling a data endpoint. The API key selects Test or Live. Test calls record a $0.000 actual charge and return the live-equivalent price. null means unavailable, not zero. Use find_test_data with operation=instagram.post.get for compatible synthetic input.
instagram_get_profileReturn one public profile. Use @username or a platform ID as the identifier. The API key selects Test or Live. Test calls record a $0.000 actual charge and return the live-equivalent price. null means unavailable, not zero. Use find_test_data with operation=instagram.profile.get for compatible synthetic input.
instagram_highlight_getGet a highlight from public Instagram data. The API key selects Test or Live. Test calls record a $0.000 actual charge and return the live-equivalent price. null means unavailable, not zero. Use find_test_data with operation=instagram.highlight.get for compatible synthetic input.
instagram_list_comment_repliesReturn a stable page of replies for one comment. Use find_test_data to discover compatible post and comment IDs. The API key selects Test or Live. Test calls record a $0.000 actual charge and return the live-equivalent price. null means unavailable, not zero. Use find_test_data with operation=instagram.comment.replies.list for compatible synthetic input.
instagram_list_followersReturn a cursor-paginated collection of Instagram profiles. The API key selects Test or Live. Test calls record a $0.000 actual charge and return the live-equivalent price. null means unavailable, not zero. Use find_test_data with operation=instagram.profile.followers.list for compatible synthetic input.
instagram_list_followingReturn a cursor-paginated collection of Instagram profiles. The API key selects Test or Live. Test calls record a $0.000 actual charge and return the live-equivalent price. null means unavailable, not zero. Use find_test_data with operation=instagram.profile.following.list for compatible synthetic input.
instagram_list_hashtag_postsReturn a cursor-paginated collection of public posts. The API key selects Test or Live. Test calls record a $0.000 actual charge and return the live-equivalent price. null means unavailable, not zero. Use find_test_data with operation=instagram.hashtag.posts.list for compatible synthetic input.
instagram_list_hashtag_reelsReturn a cursor-paginated collection of Instagram reels for a hashtag. The API key selects Test or Live. Test calls record a $0.000 actual charge and return the live-equivalent price. null means unavailable, not zero. Use find_test_data with operation=instagram.hashtag.reels.list for compatible synthetic input.
instagram_list_location_postsReturn a cursor-paginated collection of public posts. The API key selects Test or Live. Test calls record a $0.000 actual charge and return the live-equivalent price. null means unavailable, not zero. Use find_test_data with operation=instagram.location.posts.list for compatible synthetic input.
instagram_list_post_commentsList post comments by a canonical platform identifier. URLs must be converted before calling a data endpoint. The API key selects Test or Live. Test calls record a $0.000 actual charge and return the live-equivalent price. null means unavailable, not zero. Use find_test_data with operation=instagram.post.comments.list for compatible synthetic input.
instagram_list_post_likersReturn public profiles that liked an Instagram post. The API key selects Test or Live. Test calls record a $0.000 actual charge and return the live-equivalent price. null means unavailable, not zero. Use find_test_data with operation=instagram.post.likers.list for compatible synthetic input.
instagram_list_post_tagged_usersReturn public profiles tagged in an Instagram post. The API key selects Test or Live. Test calls record a $0.000 actual charge and return the live-equivalent price. null means unavailable, not zero. Use find_test_data with operation=instagram.post.tagged.users.list for compatible synthetic input.
instagram_list_profile_pinned_postsReturn a cursor-paginated Instagram profile collection. The API key selects Test or Live. Test calls record a $0.000 actual charge and return the live-equivalent price. null means unavailable, not zero. Use find_test_data with operation=instagram.profile.pinned.posts.list for compatible synthetic input.
instagram_list_profile_postsReturn a stable page of posts for one public profile. The API key selects Test or Live. Test calls record a $0.000 actual charge and return the live-equivalent price. null means unavailable, not zero. Use find_test_data with operation=instagram.profile.posts.list for compatible synthetic input.
instagram_list_profile_reelsReturn a cursor-paginated Instagram profile collection. The API key selects Test or Live. Test calls record a $0.000 actual charge and return the live-equivalent price. null means unavailable, not zero. Use find_test_data with operation=instagram.profile.reels.list for compatible synthetic input.
instagram_list_profile_repostsReturn a cursor-paginated Instagram profile collection. The API key selects Test or Live. Test calls record a $0.000 actual charge and return the live-equivalent price. null means unavailable, not zero. Use find_test_data with operation=instagram.profile.reposts.list for compatible synthetic input.
instagram_list_profile_tagged_postsReturn a cursor-paginated Instagram profile collection. The API key selects Test or Live. Test calls record a $0.000 actual charge and return the live-equivalent price. null means unavailable, not zero. Use find_test_data with operation=instagram.profile.tagged.posts.list for compatible synthetic input.
instagram_list_profile_videosReturn a cursor-paginated Instagram profile collection. The API key selects Test or Live. Test calls record a $0.000 actual charge and return the live-equivalent price. null means unavailable, not zero. Use find_test_data with operation=instagram.profile.videos.list for compatible synthetic input.
instagram_list_suggestedReturn the current collection of Instagram profiles. The API key selects Test or Live. Test calls record a $0.000 actual charge and return the live-equivalent price. null means unavailable, not zero. Use find_test_data with operation=instagram.profile.suggested.list for compatible synthetic input.
instagram_music_stream_listList music stream pages from public Instagram data. The API key selects Test or Live. Test calls record a $0.000 actual charge and return the live-equivalent price. null means unavailable, not zero. Use find_test_data with operation=instagram.music.stream.list for compatible synthetic input.
instagram_post_clip_metadata_getGet clip metadata from public Instagram data. The API key selects Test or Live. Test calls record a $0.000 actual charge and return the live-equivalent price. null means unavailable, not zero. Use find_test_data with operation=instagram.post.clip.metadata.get for compatible synthetic input.
instagram_post_comment_metadata_getGet comment metadata from public Instagram data. The API key selects Test or Live. Test calls record a $0.000 actual charge and return the live-equivalent price. null means unavailable, not zero. Use find_test_data with operation=instagram.post.comment.metadata.get for compatible synthetic input.
instagram_post_comment_moderation_getCheck comment moderation from public Instagram data. The API key selects Test or Live. Test calls record a $0.000 actual charge and return the live-equivalent price. null means unavailable, not zero. Use find_test_data with operation=instagram.post.comment.moderation.get for compatible synthetic input.
instagram_post_insights_getGet post insights from public Instagram data. The API key selects Test or Live. Test calls record a $0.000 actual charge and return the live-equivalent price. null means unavailable, not zero. Use find_test_data with operation=instagram.post.insights.get for compatible synthetic input.
instagram_post_oembed_getGet post oEmbed data from public Instagram data. The API key selects Test or Live. Test calls record a $0.000 actual charge and return the live-equivalent price. null means unavailable, not zero. Use find_test_data with operation=instagram.post.oembed.get for compatible synthetic input.
instagram_post_template_getGet post template from public Instagram data. The API key selects Test or Live. Test calls record a $0.000 actual charge and return the live-equivalent price. null means unavailable, not zero. Use find_test_data with operation=instagram.post.template.get for compatible synthetic input.
instagram_profile_about_getGet profile about information from public Instagram data. The API key selects Test or Live. Test calls record a $0.000 actual charge and return the live-equivalent price. null means unavailable, not zero. Use find_test_data with operation=instagram.profile.about.get for compatible synthetic input.
instagram_profile_business_recommendations_listList business recommendations from public Instagram data. The API key selects Test or Live. Test calls record a $0.000 actual charge and return the live-equivalent price. null means unavailable, not zero. Use find_test_data with operation=instagram.profile.business.recommendations.list for compatible synthetic input.
instagram_profile_highlights_listList profile highlights from public Instagram data. The API key selects Test or Live. Test calls record a $0.000 actual charge and return the live-equivalent price. null means unavailable, not zero. Use find_test_data with operation=instagram.profile.highlights.list for compatible synthetic input.
instagram_profile_stories_listList profile stories from public Instagram data. The API key selects Test or Live. Test calls record a $0.000 actual charge and return the live-equivalent price. null means unavailable, not zero. Use find_test_data with operation=instagram.profile.stories.list for compatible synthetic input.
instagram_search_hashtagsSearch public Instagram hashtags with cursor pagination. The API key selects Test or Live. Test calls record a $0.000 actual charge and return the live-equivalent price. null means unavailable, not zero. Use find_test_data with operation=instagram.search.hashtags.list for compatible synthetic input.
instagram_search_musicSearch public Instagram music with cursor pagination. The API key selects Test or Live. Test calls record a $0.000 actual charge and return the live-equivalent price. null means unavailable, not zero. Use find_test_data with operation=instagram.search.music.list for compatible synthetic input.
instagram_search_placesSearch public Instagram places with cursor pagination. The API key selects Test or Live. Test calls record a $0.000 actual charge and return the live-equivalent price. null means unavailable, not zero. Use find_test_data with operation=instagram.search.places.list for compatible synthetic input.
instagram_search_profile_followersSearch within a public profile's followers collection. The API key selects Test or Live. Test calls record a $0.000 actual charge and return the live-equivalent price. null means unavailable, not zero. Use find_test_data with operation=instagram.profile.followers.search for compatible synthetic input.
instagram_search_profile_followingSearch within a public profile's following collection. The API key selects Test or Live. Test calls record a $0.000 actual charge and return the live-equivalent price. null means unavailable, not zero. Use find_test_data with operation=instagram.profile.following.search for compatible synthetic input.
instagram_search_profilesSearch public Instagram profiles with cursor pagination. The API key selects Test or Live. Test calls record a $0.000 actual charge and return the live-equivalent price. null means unavailable, not zero. Use find_test_data with operation=instagram.search.profiles.list for compatible synthetic input.
instagram_search_reelsSearch public Instagram reels with cursor pagination. The API key selects Test or Live. Test calls record a $0.000 actual charge and return the live-equivalent price. null means unavailable, not zero. Use find_test_data with operation=instagram.search.reels.list for compatible synthetic input.
instagram_search_top_listSearch all Instagram results from public Instagram data. The API key selects Test or Live. Test calls record a $0.000 actual charge and return the live-equivalent price. null means unavailable, not zero. Use find_test_data with operation=instagram.search.top.list for compatible synthetic input.
instagram_story_getGet a story from public Instagram data. The API key selects Test or Live. Test calls record a $0.000 actual charge and return the live-equivalent price. null means unavailable, not zero. Use find_test_data with operation=instagram.story.get for compatible synthetic input.
reddit_domain_posts_listList domain posts from public Reddit data. The API key selects Test or Live. Test calls record a $0.000 actual charge and return the live-equivalent price. null means unavailable, not zero. Use find_test_data with operation=reddit.domain.posts.list for compatible synthetic input.
reddit_post_comments_listList post comments from public Reddit data. The API key selects Test or Live. Test calls record a $0.000 actual charge and return the live-equivalent price. null means unavailable, not zero. Use find_test_data with operation=reddit.post.comments.list for compatible synthetic input.
reddit_post_duplicates_listList duplicate posts from public Reddit data. The API key selects Test or Live. Test calls record a $0.000 actual charge and return the live-equivalent price. null means unavailable, not zero. Use find_test_data with operation=reddit.post.duplicates.list for compatible synthetic input.
reddit_post_getGet a post from public Reddit data. The API key selects Test or Live. Test calls record a $0.000 actual charge and return the live-equivalent price. null means unavailable, not zero. Use find_test_data with operation=reddit.post.get for compatible synthetic input.
reddit_profile_comments_listList profile comments from public Reddit data. The API key selects Test or Live. Test calls record a $0.000 actual charge and return the live-equivalent price. null means unavailable, not zero. Use find_test_data with operation=reddit.profile.comments.list for compatible synthetic input.
reddit_profile_getReturn one public Reddit profile. Use @username or a t2_ profile ID. An ID resolves only after the profile was read by username once. The API key selects Test or Live. Test calls record a $0.000 actual charge and return the live-equivalent price. null means unavailable, not zero. Use find_test_data with operation=reddit.profile.get for compatible synthetic input.
reddit_profile_moderated_listList moderated subreddits from public Reddit data. The API key selects Test or Live. Test calls record a $0.000 actual charge and return the live-equivalent price. null means unavailable, not zero. Use find_test_data with operation=reddit.profile.moderated.list for compatible synthetic input.
reddit_profile_posts_listList profile posts from public Reddit data. The API key selects Test or Live. Test calls record a $0.000 actual charge and return the live-equivalent price. null means unavailable, not zero. Use find_test_data with operation=reddit.profile.posts.list for compatible synthetic input.
reddit_profile_trophies_listList profile trophies from public Reddit data. The API key selects Test or Live. Test calls record a $0.000 actual charge and return the live-equivalent price. null means unavailable, not zero. Use find_test_data with operation=reddit.profile.trophies.list for compatible synthetic input.
reddit_search_posts_listSearch posts from public Reddit data. The API key selects Test or Live. Test calls record a $0.000 actual charge and return the live-equivalent price. null means unavailable, not zero. Use find_test_data with operation=reddit.search.posts.list for compatible synthetic input.
reddit_search_profiles_listSearch profiles from public Reddit data. The API key selects Test or Live. Test calls record a $0.000 actual charge and return the live-equivalent price. null means unavailable, not zero. Use find_test_data with operation=reddit.search.profiles.list for compatible synthetic input.
reddit_search_subreddits_listSearch subreddits from public Reddit data. The API key selects Test or Live. Test calls record a $0.000 actual charge and return the live-equivalent price. null means unavailable, not zero. Use find_test_data with operation=reddit.search.subreddits.list for compatible synthetic input.
reddit_subreddit_getGet a subreddit from public Reddit data. The API key selects Test or Live. Test calls record a $0.000 actual charge and return the live-equivalent price. null means unavailable, not zero. Use find_test_data with operation=reddit.subreddit.get for compatible synthetic input.
reddit_subreddit_posts_listList subreddit posts from public Reddit data. The API key selects Test or Live. Test calls record a $0.000 actual charge and return the live-equivalent price. null means unavailable, not zero. Use find_test_data with operation=reddit.subreddit.posts.list for compatible synthetic input.
reddit_subreddit_rules_listList subreddit rules from public Reddit data. The API key selects Test or Live. Test calls record a $0.000 actual charge and return the live-equivalent price. null means unavailable, not zero. Use find_test_data with operation=reddit.subreddit.rules.list for compatible synthetic input.