Koskamo

BetaFinds MCP

An official MCP server for BetaFinds that allows AI agents to publish and update startup listings, post changelog updates, and upload release files. It supports creating startups, updating fields, uploading images, and managing releases for Windows, macOS, Android, and Linux.

Endpoint and access

No sign-in to connect and list tools. Individual tools may still need a vendor account, credentials, or permissions; check the documented prerequisites.

BetaFinds MCP logo, by OPSoft IncCommunity listingStreamable HTTPNo sign-inEndpoint checked 2026-11-06Published by OPSoft Inc
You need:create an account and give you an API tokenAn API token is created in your profile: https://betafinds.com/profile
MCP endpoint (Streamable HTTP)
https://betafinds.com/api/mcp
Vendor documentation

What its tools do

14 tools, grouped by the hints the server advertises. Hints are self-declared, not verified behavior.

14 of 14 have a description · 14 of 14 declare behavior hints · 12 of 12 with parameters document them all

Checks and signals

Each line is separate evidence, not a trust score.

  • Passed Endpoint answered the live check ·
  • Availability 1 of 1 checks passed in 30 days

What you can do with it

  • List your startups and their slugs
  • Create a new startup listing
  • Post a changelog update to a startup
  • Create a release for an operating system

Source and maintenance

Community listingRegistry 1.0.0
Maintenance checked

Protocol and capabilities

Server
betafinds 1.0.0
MCP protocol negotiated in check
2025-06-18
Tools
14 advertised
Resources
Not advertised
Resource templates
Not advertised
Prompts
Not advertised
Server-advertised capabilities
{
  "tools": {
    "listChanged": false
  }
}

Server-provided instructions

Untrusted server output shown for inspection. It is not Koskamo guidance and is excluded from knowledge search.

Publish updates and releases for your startups on BetaFinds. Start with list_my_startups to find the slug. Full API documentation: https://betafinds.com/api.txt

Tools

14 advertised

create_startup
Advertised by the server during the last successful anonymous check.

Create a new startup on BetaFinds (submitted for review). Upload the logo and screenshots first via upload_image (or POST https://betafinds.com/api/v1/images) and pass the returned URLs here. Set the category by slug — get the list via list_categories (a category name also works, case-insensitive).

create_startup input schema
{
  "type": "object",
  "required": [
    "name",
    "tagline",
    "description"
  ],
  "properties": {
    "url": {
      "type": "string",
      "description": "Product website URL (required for stage=LAUNCHED, optional for prelaunch)"
    },
    "logo": {
      "type": "string",
      "description": "Logo URL from upload_image (optional)"
    },
    "name": {
      "type": "string",
      "description": "Product name"
    },
    "tags": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "description": "Tags (up to 6)"
    },
    "stage": {
      "enum": [
        "PRELAUNCH",
        "BETA",
        "LAUNCHED"
      ],
      "type": "string",
      "description": "Product stage: PRELAUNCH — preparing to launch, BETA — recruiting beta testers, LAUNCHED — already launched (default)"
    },
    "tagline": {
      "type": "string",
      "description": "One-line tagline (up to 160 characters)"
    },
    "appStoreUrl": {
      "type": "string",
      "description": "App Store page link (iOS)"
    },
    "description": {
      "type": "string",
      "description": "Full description (min 50 characters)"
    },
    "screenshots": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "description": "Screenshot URLs from upload_image (up to 5, optional)"
    },
    "category_slug": {
      "type": "string",
      "description": "Category slug (e.g. ai, saas, fintech)"
    },
    "googlePlayUrl": {
      "type": "string",
      "description": "Google Play page link (Android)"
    },
    "testflightUrl": {
      "type": "string",
      "description": "TestFlight link (iOS beta)"
    },
    "prelaunch_ready": {
      "type": "string",
      "description": "What is already done: prototype, design, private beta… (up to 1000 characters)"
    },
    "prelaunch_promise": {
      "type": "string",
      "description": "What a waitlist subscriber will get (up to 1000 characters)"
    },
    "prelaunch_audience": {
      "type": "string",
      "description": "Who the product is for (up to 1000 characters)"
    },
    "target_launch_date": {
      "type": "string",
      "description": "Estimated launch date in YYYY-MM-DD format (for prelaunch; empty string clears it)"
    }
  },
  "additionalProperties": false
}
create_startup output schema
{
  "type": "object",
  "properties": {
    "url": {
      "type": "string"
    },
    "slug": {
      "type": "string"
    },
    "status": {
      "type": "string"
    },
    "message": {
      "type": "string"
    }
  },
  "additionalProperties": true
}
create_startup annotations
{
  "title": "Create startup",
  "readOnlyHint": false,
  "openWorldHint": false,
  "idempotentHint": false,
  "destructiveHint": false
}
update_startup
Advertised by the server during the last successful anonymous check.

Update an existing startup: app-store links, website, short/full description, tags, category, logo and screenshots. Upload the logo and screenshots first via upload_image and pass the returned URLs (screenshots fully replace the current set; to clear the logo, pass an empty string). Pass only the fields you want to change. See current values via list_my_startups. Note: editing an approved startup sends it back to moderation.

update_startup input schema
{
  "type": "object",
  "required": [
    "startup_slug"
  ],
  "properties": {
    "url": {
      "type": "string",
      "description": "Product website URL"
    },
    "logo": {
      "type": "string",
      "description": "Logo URL from upload_image (empty string to clear)"
    },
    "tags": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "description": "Tags (up to 6)"
    },
    "tagline": {
      "type": "string",
      "description": "One-line tagline (up to 160 characters)"
    },
    "appStoreUrl": {
      "type": "string",
      "description": "App Store page link (iOS)"
    },
    "description": {
      "type": "string",
      "description": "Full description (min 50 characters)"
    },
    "screenshots": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "description": "Screenshot URLs from upload_image (up to 5; fully replace the current set)"
    },
    "startup_slug": {
      "type": "string",
      "description": "Startup slug (from list_my_startups)"
    },
    "category_slug": {
      "type": "string",
      "description": "Category slug (see list_categories)"
    },
    "googlePlayUrl": {
      "type": "string",
      "description": "Google Play page link (Android)"
    },
    "testflightUrl": {
      "type": "string",
      "description": "TestFlight link (iOS beta)"
    },
    "prelaunch_ready": {
      "type": "string",
      "description": "What is already done: prototype, design, private beta… (up to 1000 characters)"
    },
    "prelaunch_promise": {
      "type": "string",
      "description": "What a waitlist subscriber will get (up to 1000 characters)"
    },
    "prelaunch_audience": {
      "type": "string",
      "description": "Who the product is for (up to 1000 characters)"
    },
    "target_launch_date": {
      "type": "string",
      "description": "Estimated launch date in YYYY-MM-DD format (for prelaunch; empty string clears it)"
    }
  },
  "additionalProperties": false
}
update_startup output schema
{
  "type": "object",
  "properties": {
    "url": {
      "type": "string"
    },
    "slug": {
      "type": "string"
    },
    "status": {
      "type": "string"
    },
    "message": {
      "type": "string"
    }
  },
  "additionalProperties": true
}
update_startup annotations
{
  "title": "Update startup",
  "readOnlyHint": false,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
list_categories
Advertised by the server during the last successful anonymous check.
Advertised read-only

List of available categories (slug and name) for create_startup.

list_categories input schema
{
  "type": "object",
  "properties": {},
  "additionalProperties": false
}
list_categories output schema
{
  "type": "object",
  "required": [
    "items"
  ],
  "properties": {
    "items": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string"
          },
          "slug": {
            "type": "string"
          }
        },
        "additionalProperties": true
      }
    }
  },
  "additionalProperties": false
}
list_categories annotations
{
  "title": "List categories",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
upload_image
Advertised by the server during the last successful anonymous check.

Upload an image (logo or screenshot) for create_startup. Pass the file content as base64 (data is base64 only, no data: prefix). Returns a url to pass into create_startup. Max 2 MB; formats: JPEG, PNG, WebP, GIF.

upload_image input schema
{
  "type": "object",
  "required": [
    "data",
    "mime_type"
  ],
  "properties": {
    "data": {
      "type": "string",
      "description": "File content in base64"
    },
    "filename": {
      "type": "string",
      "description": "File name (optional)"
    },
    "mime_type": {
      "type": "string",
      "description": "MIME type: image/png, image/jpeg, image/webp, image/gif"
    }
  },
  "additionalProperties": false
}
upload_image output schema
{
  "type": "object",
  "properties": {
    "url": {
      "type": "string"
    },
    "path": {
      "type": "string"
    }
  },
  "additionalProperties": true
}
upload_image annotations
{
  "title": "Upload image",
  "readOnlyHint": false,
  "openWorldHint": false,
  "idempotentHint": false,
  "destructiveHint": false
}
list_my_startups
Advertised by the server during the last successful anonymous check.
Advertised read-only

List of your startups on BetaFinds (slug, name, status). Updates can only be published for startups with APPROVED status.

list_my_startups input schema
{
  "type": "object",
  "properties": {},
  "additionalProperties": false
}
list_my_startups output schema
{
  "type": "object",
  "required": [
    "items"
  ],
  "properties": {
    "items": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "url": {
            "type": "string"
          },
          "name": {
            "type": "string"
          },
          "slug": {
            "type": "string"
          },
          "stage": {
            "type": "string"
          },
          "status": {
            "type": "string"
          },
          "waitlistCount": {
            "type": "number"
          }
        },
        "additionalProperties": true
      }
    }
  },
  "additionalProperties": false
}
list_my_startups annotations
{
  "title": "My startups",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
publish_update
Advertised by the server during the last successful anonymous check.

Publish an update (an entry in the «What's new» feed) for your startup. Subscribers receive an email summary within ~10 minutes. body supports Markdown.

publish_update input schema
{
  "type": "object",
  "required": [
    "startup_slug",
    "title",
    "body"
  ],
  "properties": {
    "body": {
      "type": "string",
      "description": "Text in Markdown (10–20000 characters)"
    },
    "type": {
      "enum": [
        "RELEASE",
        "UPDATE",
        "FIX",
        "NEWS"
      ],
      "type": "string",
      "description": "Type: RELEASE — new version, UPDATE — improvement, FIX — fix, NEWS — news. Defaults to NEWS."
    },
    "title": {
      "type": "string",
      "description": "Update title (3–200 characters)"
    },
    "version": {
      "type": "string",
      "description": "Version, if applicable (e.g. 1.4.0)"
    },
    "startup_slug": {
      "type": "string",
      "description": "Startup slug (from list_my_startups)"
    }
  },
  "additionalProperties": false
}
publish_update output schema
{
  "type": "object",
  "properties": {
    "id": {
      "type": "string"
    },
    "message": {
      "type": "string"
    },
    "publishedAt": {
      "type": "string"
    }
  },
  "additionalProperties": true
}
publish_update annotations
{
  "title": "Publish update",
  "readOnlyHint": false,
  "openWorldHint": false,
  "idempotentHint": false,
  "destructiveHint": false
}
create_release
Advertised by the server during the last successful anonymous check.

Create a release (version) of your startup. By default also publishes a RELEASE-type update with the notes text. After creation, upload files via request_asset_upload.

create_release input schema
{
  "type": "object",
  "required": [
    "startup_slug",
    "version"
  ],
  "properties": {
    "notes": {
      "type": "string",
      "description": "Release notes in Markdown"
    },
    "version": {
      "type": "string",
      "description": "Version, e.g. 1.4.0"
    },
    "announce": {
      "type": "boolean",
      "description": "Whether to publish an update in the feed (default true)"
    },
    "startup_slug": {
      "type": "string",
      "description": "Startup slug"
    }
  },
  "additionalProperties": false
}
create_release output schema
{
  "type": "object",
  "properties": {
    "message": {
      "type": "string"
    },
    "version": {
      "type": "string"
    },
    "release_id": {
      "type": "string"
    }
  },
  "additionalProperties": true
}
create_release annotations
{
  "title": "Create release",
  "readOnlyHint": false,
  "openWorldHint": false,
  "idempotentHint": false,
  "destructiveHint": false
}
request_asset_upload
Advertised by the server during the last successful anonymous check.

Get a one-time link to upload a release file (Windows/Mac/Android/Linux, up to 1 GB). Then upload the file: curl -T <file> '<upload_url>'. After uploading, call complete_asset_upload.

request_asset_upload input schema
{
  "type": "object",
  "required": [
    "release_id",
    "platform",
    "filename",
    "size"
  ],
  "properties": {
    "size": {
      "type": "number",
      "description": "File size in bytes (exact)"
    },
    "sha256": {
      "type": "string",
      "description": "File SHA-256 (hex, optional)"
    },
    "filename": {
      "type": "string",
      "description": "File name, e.g. MyApp-1.4.0.dmg"
    },
    "platform": {
      "enum": [
        "WINDOWS",
        "MACOS",
        "ANDROID",
        "LINUX"
      ],
      "type": "string",
      "description": "File platform"
    },
    "release_id": {
      "type": "string",
      "description": "Release ID from create_release"
    }
  },
  "additionalProperties": false
}
request_asset_upload output schema
{
  "type": "object",
  "properties": {
    "assetId": {
      "type": "string"
    },
    "uploadUrl": {
      "type": "string"
    },
    "downloadUrl": {
      "type": "string"
    },
    "instructions": {
      "type": "string"
    }
  },
  "additionalProperties": true
}
request_asset_upload annotations
{
  "title": "Request file upload",
  "readOnlyHint": false,
  "openWorldHint": false,
  "idempotentHint": false,
  "destructiveHint": false
}
complete_asset_upload
Advertised by the server during the last successful anonymous check.

Confirm that the release file has been uploaded. Verifies the file's presence and size in storage and makes it available for download.

complete_asset_upload input schema
{
  "type": "object",
  "required": [
    "asset_id"
  ],
  "properties": {
    "asset_id": {
      "type": "string",
      "description": "File ID from request_asset_upload"
    }
  },
  "additionalProperties": false
}
complete_asset_upload output schema
{
  "type": "object",
  "properties": {
    "downloadUrl": {
      "type": "string"
    }
  },
  "additionalProperties": true
}
complete_asset_upload annotations
{
  "title": "Complete file upload",
  "readOnlyHint": false,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
get_releases
Advertised by the server during the last successful anonymous check.
Advertised read-only

Список опубликованных релизов стартапа с файлами. Для LAUNCHED-проектов downloadUrl — постоянная прямая ссылка. На закрытых стадиях ссылка возвращается только для своих стартапов или где у вас открыт доступ (иначе locked=true, downloadUrl=null).

get_releases input schema
{
  "type": "object",
  "required": [
    "startup_slug"
  ],
  "properties": {
    "startup_slug": {
      "type": "string",
      "description": "Startup slug"
    }
  },
  "additionalProperties": false
}
get_releases output schema
{
  "type": "object",
  "required": [
    "items"
  ],
  "properties": {
    "items": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          },
          "assets": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "size": {
                  "type": "number"
                },
                "filename": {
                  "type": "string"
                },
                "platform": {
                  "type": "string"
                },
                "downloadUrl": {
                  "type": [
                    "string",
                    "null"
                  ]
                }
              },
              "additionalProperties": true
            }
          },
          "locked": {
            "type": "boolean"
          },
          "version": {
            "type": "string"
          },
          "publishedAt": {
            "type": "string"
          }
        },
        "additionalProperties": true
      }
    }
  },
  "additionalProperties": false
}
get_releases annotations
{
  "title": "List releases",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
change_startup_stage
Advertised by the server during the last successful anonymous check.

Change your startup's product stage: PRELAUNCH — preparing to launch, BETA — recruiting beta testers, PAUSED — development paused (requires public_note). To move to LAUNCHED use announce_launch. Allowed transitions: PRELAUNCH→BETA/PAUSED, BETA→PAUSED, PAUSED→PRELAUNCH/BETA.

change_startup_stage input schema
{
  "type": "object",
  "required": [
    "startup_slug",
    "stage"
  ],
  "properties": {
    "stage": {
      "enum": [
        "PRELAUNCH",
        "BETA",
        "PAUSED"
      ],
      "type": "string",
      "description": "New stage"
    },
    "public_note": {
      "type": "string",
      "description": "Public note (required for PAUSED, up to 500 characters)"
    },
    "startup_slug": {
      "type": "string",
      "description": "Startup slug (from list_my_startups)"
    }
  },
  "additionalProperties": false
}
change_startup_stage output schema
{
  "type": "object",
  "properties": {
    "slug": {
      "type": "string"
    },
    "stage": {
      "type": "string"
    },
    "message": {
      "type": "string"
    }
  },
  "additionalProperties": true
}
change_startup_stage annotations
{
  "title": "Change stage",
  "readOnlyHint": false,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
announce_launch
Advertised by the server during the last successful anonymous check.

Announce your startup's official launch: the stage becomes LAUNCHED, a LAUNCH update is published, and waitlist members are notified (once). A working product link is required (url or an already saved store link).

announce_launch input schema
{
  "type": "object",
  "required": [
    "startup_slug",
    "title",
    "body"
  ],
  "properties": {
    "url": {
      "type": "string",
      "description": "Working product link (if not set yet)"
    },
    "body": {
      "type": "string",
      "description": "Description of the first public version, Markdown (10–20000 characters)"
    },
    "title": {
      "type": "string",
      "description": "Launch headline (3–200 characters)"
    },
    "startup_slug": {
      "type": "string",
      "description": "Startup slug (from list_my_startups)"
    },
    "notify_waitlist": {
      "type": "boolean",
      "description": "Notify the waitlist (default true)"
    }
  },
  "additionalProperties": false
}
announce_launch output schema
{
  "type": "object",
  "properties": {
    "slug": {
      "type": "string"
    },
    "stage": {
      "type": "string"
    },
    "message": {
      "type": "string"
    },
    "firstLaunch": {
      "type": "boolean"
    }
  },
  "additionalProperties": true
}
announce_launch annotations
{
  "title": "Announce launch",
  "readOnlyHint": false,
  "openWorldHint": false,
  "idempotentHint": false,
  "destructiveHint": false
}
get_waitlist
Advertised by the server during the last successful anonymous check.
Advertised read-only

Waitlist summary for your startup: aggregated counters (active, per week/month, ready to test, invited/accepted), answer distribution for the question, recent anonymized answers and campaigns with aggregated statistics. Participants' contact details are not returned.

get_waitlist input schema
{
  "type": "object",
  "required": [
    "startup_slug"
  ],
  "properties": {
    "startup_slug": {
      "type": "string",
      "description": "Startup slug (from list_my_startups)"
    }
  },
  "additionalProperties": false
}
get_waitlist output schema
{
  "type": "object",
  "properties": {
    "slug": {
      "type": "string"
    },
    "stage": {
      "type": "string"
    },
    "question": {
      "type": "object",
      "properties": {
        "text": {
          "type": "string"
        },
        "type": {
          "type": "string"
        }
      },
      "additionalProperties": true
    },
    "waitlist": {
      "type": "object",
      "properties": {
        "active": {
          "type": "number"
        },
        "invited": {
          "type": "number"
        },
        "accepted": {
          "type": "number"
        },
        "wantsBeta": {
          "type": "number"
        },
        "newPerWeek": {
          "type": "number"
        },
        "newPerMonth": {
          "type": "number"
        }
      },
      "additionalProperties": true
    },
    "campaigns": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "status": {
            "type": "string"
          },
          "subject": {
            "type": "string"
          }
        },
        "additionalProperties": true
      }
    }
  },
  "additionalProperties": true
}
get_waitlist annotations
{
  "title": "Waitlist",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
get_store_reviews
Advertised by the server during the last successful anonymous check.
Advertised read-only

Public Google Play and App Store reviews of your startup: monitoring state per store and the latest reviews (rating, text, developer response). Reviews are collected automatically via the app links.

get_store_reviews input schema
{
  "type": "object",
  "required": [
    "startup_slug"
  ],
  "properties": {
    "page": {
      "type": "number",
      "description": "Page (20 reviews each, default 1)"
    },
    "startup_slug": {
      "type": "string",
      "description": "Startup slug (from list_my_startups)"
    }
  },
  "additionalProperties": false
}
get_store_reviews output schema
{
  "type": "object",
  "properties": {
    "slug": {
      "type": "string"
    },
    "total": {
      "type": "number"
    },
    "reviews": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "body": {
            "type": "string"
          },
          "rating": {
            "type": "number"
          },
          "platform": {
            "type": "string"
          }
        },
        "additionalProperties": true
      }
    },
    "monitors": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "status": {
            "type": "string"
          },
          "platform": {
            "type": "string"
          }
        },
        "additionalProperties": true
      }
    }
  },
  "additionalProperties": true
}
get_store_reviews annotations
{
  "title": "Store reviews",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}

Prompts

Not advertised

No prompt definitions available.

Resources

Not advertised

No resource definitions available.

90-day uptime

A lightweight connection check about every six hours, sampled on hosts with many listings. It shows the server answered, not that its tools work.

Too few checks for a percentage yet (2 of 2 answered).

  1. 2026-11-06: 1 of 1 checks answered
  2. 2026-11-07: 1 of 1 checks answered

30-day availability

Aggregated from read-only remote checks; this is not a tool-execution or security guarantee.

Successful checks
1 of 1 (100%)
Average latency
1001 ms
95th percentile latency
1001 ms

Maintenance history

Public check and source-refresh events. Editorial and ownership records remain private.

  • · probe · passed · 1001 ms · metadata changed · 14 tool(s)

Connect from your client

Each snippet registers the same endpoint; pick the client you use.

This server is operated by the named third party. Listing and endpoint checks are not an endorsement or a security audit. Review the operator's permissions, terms, and data handling before connecting. How listings are checked and corrected.

Claude Code

Run this once in a terminal. It registers the remote server. Use --scope project to write .mcp.json for the repo.
Claude Code configuration
claude mcp add --transport http betafinds-mcp https://betafinds.com/api/mcp

Codex

Run this once. Codex stores MCP servers in ~/.codex/config.toml (or .codex/config.toml in a trusted project).
Codex configuration
codex mcp add betafinds-mcp --url https://betafinds.com/api/mcp

Cursor

Merge this server into .cursor/mcp.json in your project, then enable betafinds-mcp in your MCP settings.
Cursor configuration
{
  "mcpServers": {
    "betafinds-mcp": {
      "url": "https://betafinds.com/api/mcp"
    }
  }
}

Cline

Merge this into cline_mcp_settings.json (Cline → MCP Servers → Configure).
Cline configuration
{
  "mcpServers": {
    "betafinds-mcp": {
      "type": "streamableHttp",
      "url": "https://betafinds.com/api/mcp",
      "disabled": false
    }
  }
}

VS Code

Merge this server into .vscode/mcp.json. Use MCP: List Servers to start betafinds-mcp and inspect its tools.
VS Code configuration
{
  "servers": {
    "betafinds-mcp": {
      "type": "http",
      "url": "https://betafinds.com/api/mcp"
    }
  }
}

Gemini CLI

Run this once. It writes .gemini/settings.json in the current project; pass --scope user for ~/.gemini/settings.json.
Gemini CLI configuration
gemini mcp add --transport http betafinds-mcp https://betafinds.com/api/mcp

Claude Desktop

Open Claude Settings > Connectors > Add custom connector, enter this server URL and enable it for the conversation. This is a manual remote-connector handoff, not a desktop JSON configuration.
Claude Desktop configuration
https://betafinds.com/api/mcp

Windsurf

Merge this into ~/.codeium/windsurf/mcp_config.json, then refresh MCP in Cascade. Windsurf remote servers use serverUrl, not url.
Windsurf configuration
{
  "mcpServers": {
    "betafinds-mcp": {
      "serverUrl": "https://betafinds.com/api/mcp"
    }
  }
}

Let your agent find its tools

Find servers like BetaFinds MCP from your agent. Add Koskamo once to search the index for endpoints, access requirements, and client setup. Public discovery needs no key.