Koskamo

Gravitate MCP

An MCP server providing bilingual dating photo guidance, fictional profile examples, curated shoot plans, and transparent scoring calculations based on supplied observations. It does not process images or perform AI inference, serving as a resource for agents to access published guides and methodological tools.

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.

Gravitate MCP logo, by GravitateVendor evidenceStreamable HTTPNo sign-inEndpoint checked 2026-11-01Operated by Gravitate
MCP endpoint (Streamable HTTP)
https://joingravitate.com/mcp
Vendor documentation

What you can do with it

  • Retrieve published dating guides and photo selection methods
  • Generate fictional profile examples for single dads or daters
  • Calculate photo presentation scores from supplied observations
  • Prepare curated photo shoot plans based on context

Source and maintenance

Vendor evidenceRegistry 0.2.0

Protocol and capabilities

Server
gravitate 0.2.0
MCP protocol
2025-06-18
Tools
6 advertised
Resources
36 advertised
Resource templates
0 advertised
Prompts
Not advertised
Server-advertised capabilities
{
  "tools": {
    "listChanged": true
  },
  "resources": {
    "listChanged": true
  }
}

Server-provided instructions

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

All currently available Gravitate MCP tools are free: no account, payment or Gravitate credits required. Your assistant provider's own fees are separate. Request limits apply; never suggest buying credits to bypass them. Gravitate provides English/French dating-photo guidance, published coaching articles, explicitly fictional profile examples, curated shoot plans, and deterministic arithmetic from supplied observations. Profile examples are not personalized assessments or proven customer outcomes. No image upload, image analysis, generation, checkout, personal-data storage or external AI calls. Cite returned source_url. Score presentation, never inherent beauty or attraction probability. Read methodology before assigning ranks. Never invent image observations or claim an illustrative score analyzed an image. User context must be explicitly supplied.

Tools

6 advertised

get_photo_guidance — Gravitate photo guidance
Advertised by the server during the last successful anonymous check.
Advertised read-only

Free; no account, payment or Gravitate credits. Use when choosing dating-profile photos, understanding the Gravitate rubric, or asking about authentic image improvements. Retrieves published English/French guidance with a source URL. Choose methodology before supplying ranks. Does not inspect images or provide general relationship/reconciliation advice.

get_photo_guidance input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "required": [
    "topic"
  ],
  "properties": {
    "topic": {
      "enum": [
        "rating",
        "methodology",
        "example",
        "attractiveness",
        "principles",
        "developers"
      ],
      "type": "string"
    },
    "locale": {
      "enum": [
        "en",
        "fr"
      ],
      "type": "string",
      "default": "en",
      "description": "Response language: English or French."
    }
  },
  "additionalProperties": false
}
get_photo_guidance annotations
{
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
build_photo_shoot_plan — Plan dating-profile photos
Advertised by the server during the last successful anonymous check.
Advertised read-only

Free; no account, payment or Gravitate credits. Use when a user wants a practical 15, 30 or 60 minute dating-photo shoot plan. Tailors curated advice to stated single-dad/returning-to-dating context, setting and photographer. No image generation, bookings, or inference about the user's identity.

build_photo_shoot_plan input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "required": [
    "persona",
    "minutes",
    "setting",
    "photographer"
  ],
  "properties": {
    "locale": {
      "enum": [
        "en",
        "fr"
      ],
      "type": "string",
      "default": "en",
      "description": "Response language: English or French."
    },
    "minutes": {
      "enum": [
        "15",
        "30",
        "60"
      ],
      "type": "string",
      "description": "Available shoot time in minutes."
    },
    "persona": {
      "enum": [
        "single_dad",
        "returning_to_dating",
        "general"
      ],
      "type": "string",
      "description": "Choose only a context the user has stated; do not infer parental status or age from an image."
    },
    "setting": {
      "enum": [
        "home",
        "outdoors",
        "both"
      ],
      "type": "string"
    },
    "photographer": {
      "enum": [
        "friend",
        "self_timer"
      ],
      "type": "string"
    }
  },
  "additionalProperties": false
}
build_photo_shoot_plan annotations
{
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
score_photo_observations — Calculate photo-presentation scores
Advertised by the server during the last successful anonymous check.
Advertised read-only

Free; no account, payment or Gravitate credits. Use only with explicitly supplied 1–4 ranks for craft, face visibility/expression, pose, setting and signal, after reading the methodology. Calculates gravitate-v1 totals and caps for 1–6 anonymous observations. Accepts no images/URLs; performs no vision or AI inference. Does not measure beauty, age, identity, attraction percentiles or match probability. Never invent ranks from a request without observations.

score_photo_observations input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "required": [
    "observation_source",
    "photos"
  ],
  "properties": {
    "locale": {
      "enum": [
        "en",
        "fr"
      ],
      "type": "string",
      "default": "en",
      "description": "Response language: English or French."
    },
    "photos": {
      "type": "array",
      "items": {
        "type": "object",
        "required": [
          "label",
          "ranks",
          "subject_present",
          "visual_defect"
        ],
        "properties": {
          "label": {
            "type": "string",
            "pattern": "^[A-F]$",
            "description": "An anonymous label A–F, never a name, URL or identifier."
          },
          "ranks": {
            "type": "object",
            "required": [
              "craft",
              "face",
              "pose",
              "setting",
              "signal"
            ],
            "properties": {
              "face": {
                "type": "integer",
                "maximum": 4,
                "minimum": 1
              },
              "pose": {
                "type": "integer",
                "maximum": 4,
                "minimum": 1
              },
              "craft": {
                "type": "integer",
                "maximum": 4,
                "minimum": 1
              },
              "signal": {
                "type": "integer",
                "maximum": 4,
                "minimum": 1
              },
              "setting": {
                "type": "integer",
                "maximum": 4,
                "minimum": 1
              }
            },
            "description": "Use the published rubric: 1 poor, 2 usable, 3 good, 4 excellent. Rank face visibility/expression, never facial beauty.",
            "additionalProperties": false
          },
          "visual_defect": {
            "type": "boolean",
            "description": "A clearly visible rendering/artifact defect; true caps the score at 60."
          },
          "subject_present": {
            "type": "boolean",
            "description": "Whether the profile owner is visible; false caps the score at 25."
          }
        },
        "additionalProperties": false
      },
      "maxItems": 6,
      "minItems": 1
    },
    "observation_source": {
      "enum": [
        "human",
        "assistant",
        "illustrative"
      ],
      "type": "string",
      "description": "Who assigned these ranks. Assistant observations are the calling assistant's judgment, not Gravitate image analysis."
    }
  },
  "additionalProperties": false
}
score_photo_observations annotations
{
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
get_service_status — Check Gravitate availability
Advertised by the server during the last successful anonymous check.
Advertised read-only

Free; no account, payment or Gravitate credits. Use when checking whether Gravitate can analyze photos, generate images, accept payments, or provide guidance. Returns actual enabled capabilities, free pricing and current limits. Does not enable paused services.

get_service_status input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "properties": {
    "locale": {
      "enum": [
        "en",
        "fr"
      ],
      "type": "string",
      "default": "en",
      "description": "Response language: English or French."
    }
  },
  "additionalProperties": false
}
get_service_status annotations
{
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
get_dating_guide — Read Gravitate dating guides
Advertised by the server during the last successful anonymous check.
Advertised read-only

Free; no account, payment or Gravitate credits. Retrieve published English/French coaching articles for single dads, dating after 40 or divorce, and deciding whether to reconnect with an ex. Start with topic=catalog to choose a guide. Returns complete editorial content, update dates and canonical sources. General guidance only: no personalized diagnosis, guaranteed reconciliation or tactics to bypass someone's boundaries.

get_dating_guide input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "properties": {
    "topic": {
      "enum": [
        "catalog",
        "single-dad-dating",
        "single-dad-profile",
        "single-dad-time",
        "single-dad-disclosure",
        "dating-after-40",
        "dating-after-divorce",
        "dating-profile-photos",
        "first-date-again",
        "get-your-ex-back",
        "should-reconcile",
        "no-contact",
        "text-your-ex"
      ],
      "type": "string",
      "default": "catalog",
      "description": "Start with catalog to choose a published guide. Fixed topics only; no private stories or profile text."
    },
    "locale": {
      "enum": [
        "en",
        "fr"
      ],
      "type": "string",
      "default": "en",
      "description": "Response language: English or French."
    }
  },
  "additionalProperties": false
}
get_dating_guide annotations
{
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
get_profile_example — See a fictional dating-profile example
Advertised by the server during the last successful anonymous check.
Advertised read-only

Free; no account, payment or Gravitate credits. Use when asked for an example bio and photo lineup for a single dad or someone returning to dating. Retrieves a clearly fictional, annotated example in English or French from a published article. It is not a real customer, personalized profile, image analysis or evidence of improved matches. Choose only the persona requested by the user.

get_profile_example input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "required": [
    "persona"
  ],
  "properties": {
    "locale": {
      "enum": [
        "en",
        "fr"
      ],
      "type": "string",
      "default": "en",
      "description": "Response language: English or French."
    },
    "persona": {
      "enum": [
        "single_dad",
        "returning_to_dating"
      ],
      "type": "string",
      "description": "Choose the example the user asks for; never infer parental status or relationship history from appearance."
    }
  },
  "additionalProperties": false
}
get_profile_example annotations
{
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}

Prompts

Not advertised

No prompt definitions available.

Resources

36 advertised

attractiveness-en — Attractiveness rating: what a photo score can really tell you

Advertised by the server during the last successful anonymous check.

attractiveness-en URI
https://joingravitate.com/attractiveness-rating

MIME type: application/json

attractiveness-fr — Note de beauté et attractivité : ce qu’une photo peut dire

Advertised by the server during the last successful anonymous check.

attractiveness-fr URI
https://joingravitate.com/fr/attractivite-photo

MIME type: application/json

developers-en — Gravitate MCP: photo guidance for assistants and developers

Advertised by the server during the last successful anonymous check.

developers-en URI
https://joingravitate.com/developers

MIME type: application/json

developers-fr — Gravitate MCP : conseils photo pour assistants et développeurs

Advertised by the server during the last successful anonymous check.

developers-fr URI
https://joingravitate.com/fr/developpeurs

MIME type: application/json

example-en — Dating photo rating example: three photos, three decisions

Advertised by the server during the last successful anonymous check.

example-en URI
https://joingravitate.com/photo-rating/example

MIME type: application/json

example-fr — Exemple de note photo : trois images, trois décisions

Advertised by the server during the last successful anonymous check.

example-fr URI
https://joingravitate.com/fr/evaluation-photo/exemple

MIME type: application/json

methodology-en — How Gravitate’s dating photo rating works

Advertised by the server during the last successful anonymous check.

methodology-en URI
https://joingravitate.com/photo-rating/methodology

MIME type: application/json

methodology-fr — Comment fonctionne la note photo Gravitate

Advertised by the server during the last successful anonymous check.

methodology-fr URI
https://joingravitate.com/fr/evaluation-photo/methode

MIME type: application/json

principles-en — Dating photo improvement and AI image generation principles

Advertised by the server during the last successful anonymous check.

principles-en URI
https://joingravitate.com/photo-principles

MIME type: application/json

principles-fr — Améliorer ses photos de rencontre : retouche et génération IA

Advertised by the server during the last successful anonymous check.

principles-fr URI
https://joingravitate.com/fr/principes-photo

MIME type: application/json

rating-en — Dating photo rating: choose a stronger profile photo

Advertised by the server during the last successful anonymous check.

rating-en URI
https://joingravitate.com/photo-rating

MIME type: application/json

rating-fr — Évaluer une photo de profil pour un site de rencontre

Advertised by the server during the last successful anonymous check.

rating-fr URI
https://joingravitate.com/fr/evaluation-photo

MIME type: application/json

article-dating-after-40-en — Dating in your 40s and 50s as a man: where to start again

Advertised by the server during the last successful anonymous check.

article-dating-after-40-en URI
https://joingravitate.com/blog/dating-in-your-40s-and-50s-as-a-man

MIME type: application/json

article-dating-after-40-fr — Faire des rencontres à 40 ou 50 ans : par où commencer quand on est un homme ?

Advertised by the server during the last successful anonymous check.

article-dating-after-40-fr URI
https://joingravitate.com/fr/blog/faire-des-rencontres-homme-40-50-ans

MIME type: application/json

article-dating-after-divorce-en — Dating after divorce for men: build a profile for your next chapter

Advertised by the server during the last successful anonymous check.

article-dating-after-divorce-en URI
https://joingravitate.com/blog/dating-after-divorce-for-men

MIME type: application/json

article-dating-after-divorce-fr — Refaire des rencontres après un divorce : conseils pour les hommes

Advertised by the server during the last successful anonymous check.

article-dating-after-divorce-fr URI
https://joingravitate.com/fr/blog/rencontres-apres-divorce-homme

MIME type: application/json

article-dating-profile-photos-en — Dating profile photos for men over 40: a simple shoot plan

Advertised by the server during the last successful anonymous check.

article-dating-profile-photos-en URI
https://joingravitate.com/blog/dating-profile-photos-for-men-over-40

MIME type: application/json

article-dating-profile-photos-fr — Photos de profil de rencontre après 40 ans : une séance simple à préparer

Advertised by the server during the last successful anonymous check.

article-dating-profile-photos-fr URI
https://joingravitate.com/fr/blog/photos-profil-rencontre-homme-40-ans

MIME type: application/json

article-first-date-again-en — Your first date after a long relationship: a practical guide

Advertised by the server during the last successful anonymous check.

article-first-date-again-en URI
https://joingravitate.com/blog/first-date-after-a-long-relationship

MIME type: application/json

article-first-date-again-fr — Premier rendez-vous après une longue relation : comment se préparer ?

Advertised by the server during the last successful anonymous check.

article-first-date-again-fr URI
https://joingravitate.com/fr/blog/premier-rendez-vous-apres-longue-relation

MIME type: application/json

article-get-your-ex-back-en — How to get your ex back: when reconnecting makes sense

Advertised by the server during the last successful anonymous check.

article-get-your-ex-back-en URI
https://joingravitate.com/blog/how-to-get-your-ex-back

MIME type: application/json

article-get-your-ex-back-fr — Récupérer son ex : quand reprendre contact a-t-il du sens ?

Advertised by the server during the last successful anonymous check.

article-get-your-ex-back-fr URI
https://joingravitate.com/fr/blog/recuperer-son-ex

MIME type: application/json

article-no-contact-en — The no-contact rule after a breakup: what it can and cannot do

Advertised by the server during the last successful anonymous check.

article-no-contact-en URI
https://joingravitate.com/blog/no-contact-rule-after-breakup

MIME type: application/json

article-no-contact-fr — Silence radio après une rupture : à quoi sert-il vraiment ?

Advertised by the server during the last successful anonymous check.

article-no-contact-fr URI
https://joingravitate.com/fr/blog/silence-radio-apres-rupture

MIME type: application/json

article-should-reconcile-en — Should I get back with my ex? Questions before you say yes

Advertised by the server during the last successful anonymous check.

article-should-reconcile-en URI
https://joingravitate.com/blog/should-i-get-back-with-my-ex

MIME type: application/json

article-should-reconcile-fr — Se remettre avec son ex : les questions à se poser avant de dire oui

Advertised by the server during the last successful anonymous check.

article-should-reconcile-fr URI
https://joingravitate.com/fr/blog/se-remettre-avec-son-ex

MIME type: application/json

article-single-dad-dating-en — Dating as a single dad: a plan that fits your real life

Advertised by the server during the last successful anonymous check.

article-single-dad-dating-en URI
https://joingravitate.com/blog/dating-as-a-single-dad

MIME type: application/json

article-single-dad-dating-fr — Rencontrer quelqu’un quand on est papa solo : par où commencer ?

Advertised by the server during the last successful anonymous check.

article-single-dad-dating-fr URI
https://joingravitate.com/fr/blog/rencontres-papa-solo

MIME type: application/json

article-single-dad-disclosure-en — When to tell a date you have kids—and what to keep private

Advertised by the server during the last successful anonymous check.

article-single-dad-disclosure-en URI
https://joingravitate.com/blog/when-to-tell-a-date-you-have-kids

MIME type: application/json

article-single-dad-disclosure-fr — Quand dire à une rencontre que vous avez des enfants ?

Advertised by the server during the last successful anonymous check.

article-single-dad-disclosure-fr URI
https://joingravitate.com/fr/blog/quand-dire-rencontre-que-vous-avez-des-enfants

MIME type: application/json

article-single-dad-profile-en — Single-dad dating profile examples that sound like you

Advertised by the server during the last successful anonymous check.

article-single-dad-profile-en URI
https://joingravitate.com/blog/single-dad-dating-profile-examples

MIME type: application/json

article-single-dad-profile-fr — Profil de rencontre pour papa solo : trois exemples à adapter

Advertised by the server during the last successful anonymous check.

article-single-dad-profile-fr URI
https://joingravitate.com/fr/blog/exemples-profil-rencontre-papa-solo

MIME type: application/json

article-single-dad-time-en — How to make time for dating as a single dad

Advertised by the server during the last successful anonymous check.

article-single-dad-time-en URI
https://joingravitate.com/blog/make-time-for-dating-as-a-single-dad

MIME type: application/json

article-single-dad-time-fr — Papa solo : comment trouver du temps pour les rencontres ?

Advertised by the server during the last successful anonymous check.

article-single-dad-time-fr URI
https://joingravitate.com/fr/blog/trouver-temps-rencontres-papa-solo

MIME type: application/json

article-text-your-ex-en — What to text your ex: a respectful first message, if contact is welcome

Advertised by the server during the last successful anonymous check.

article-text-your-ex-en URI
https://joingravitate.com/blog/what-to-text-your-ex

MIME type: application/json

article-text-your-ex-fr — Quel message envoyer pour recontacter son ex ?

Advertised by the server during the last successful anonymous check.

article-text-your-ex-fr URI
https://joingravitate.com/fr/blog/message-pour-recontacter-son-ex

MIME type: application/json

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
987 ms
95th percentile latency
987 ms

Maintenance history

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

  • · probe · passed · 987 ms · metadata changed · 6 tool(s), 36 resource(s), 0 resource template(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 gravitate-mcp https://joingravitate.com/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 gravitate-mcp --url https://joingravitate.com/mcp

Cursor

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

Cline

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

VS Code

Merge this server into .vscode/mcp.json. Use MCP: List Servers to start gravitate-mcp and inspect its tools.
VS Code configuration
{
  "servers": {
    "gravitate-mcp": {
      "type": "http",
      "url": "https://joingravitate.com/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 gravitate-mcp https://joingravitate.com/mcp

Claude Desktop

Merge this into claude_desktop_config.json (macOS: ~/Library/Application Support/Claude/, Windows: %APPDATA%\Claude\), then restart Claude Desktop.
Claude Desktop configuration
{
  "mcpServers": {
    "gravitate-mcp": {
      "url": "https://joingravitate.com/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": {
    "gravitate-mcp": {
      "serverUrl": "https://joingravitate.com/mcp"
    }
  }
}

Let your agent find its tools

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

Do you run Gravitate MCP?

Prove ownership with a DNS record, a well-known file, or your Official MCP Registry entry, and your edits publish immediately. Proofs are re-checked weekly; admins can still hide or remove a listing.

Claim this listing