Fantasy World MCP Simulator
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@Fantasy World MCP SimulatorInitialize a world from a small cave discovered by refugees."
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Fantasy World MCP Simulator
A Model Context Protocol (MCP) server for procedural fantasy world generation and evolution simulation. Starting from a simple event (like "a small cave"), it simulates anthropological and geographical changes over centuries, generating rich history, dungeons, cities, and events for fantasy settings.
Features
Procedural History Generation: Simulate centuries of world evolution from simple starting conditions
Anthropological Simulation: Population growth, technology progression, social organization evolution
Geographical Changes: Resource dynamics, natural events, terrain modifications
Location Evolution: Cave → Settlement → Village → City → Ruins progression
Monster System: Dragons, giants, orcs, goblins, undead with raid mechanics, counter-attacks, extinction
Quest Generation: Auto-generated quests for monster hunts, famine, disease, resource shortages
Craft/Heritage System: Magical items, weapons, artifacts with rarities and hidden/lost heritage
Religion & Belief System: Pantheons, monotheism, animism, cults with faith-based defense, religious quests, holy items
Causal Event Tracking: Every event links back to its causes
Multiple Export Formats: JSON, Markdown, narrative, GM notes with adventure hooks
World Persistence: Load/restore worlds from saved JSON data (
loadWorldtool)
Related MCP server: rpg-mcp
Installation
# Clone or navigate to the project
cd fantasy-world-mcp
# Install dependencies
npm install
# Build the project
npm run buildConfiguration
Opencode Setup
Step 1: Build the project:
npm run buildStep 2: Add the MCP server to your opencode config (~/.config/opencode/opencode.json):
Add this to the "mcp" section of your config:
"mcp": {
"world-evolution": {
"type": "local",
"command": ["node", "/path/to/fantasy-world-mcp/dist/index.js"]
}
}Step 3: Verify it's working:
opencode mcp listYou should see:
✓ world-evolution connected
node /path/to/fantasy-world-mcp/dist/index.jsImportant: The resources parameter must be explicitly set (even to an empty object {}) when initializing a world, otherwise the API will fail.
Step 4: Start opencode and ask your AI to create a world!
VS Code / Cursor Setup
Add to your MCP client configuration:
{
"mcpServers": {
"world-evolution": {
"command": "node",
"args": ["/path/to/fantasy-world-mcp/dist/index.js"],
"cwd": "/path/to/fantasy-world-mcp"
}
}
}Alternative: npx (no installation)
{
"mcpServers": {
"world-evolution": {
"command": "npx",
"args": ["-y", "tsx", "/path/to/fantasy-world-mcp/src/index.ts"]
}
}
}Usage Guide for AI
1. Initialize a New World
Start by creating a world with initial conditions:
Tool: initializeWorld
Arguments:
{
"event": "A small cave discovered by 20 refugees fleeing a great war",
"locationType": "cave",
"region": "mountains",
"climate": "temperate",
"resources": {
"iron": 60,
"stone": 80,
"food": 40,
"water": 70
},
"population": {
"name": "The Exiles",
"size": 20,
"culture": "Mountain Folk",
"organization": "tribal"
}
}Parameter Guide:
event: Free-text description of the starting eventlocationType: cave, settlement, city, dungeon, fortress, temple, village, trade_post, ruins, landmarkregion: plains, mountains, forest, desert, swamp, hills, coastal, tundra, jungleclimate: arctic, temperate, tropical, arid, continentalresources: Object with resource names (iron, gold, silver, copper, wood, stone, food, water, magic, gems) and values 0-100population.name: Name of the starting grouppopulation.size: Initial population countpopulation.culture: Cultural identitypopulation.organization: nomadic, tribal, feudal, kingdom, empire
2. Run Simulation
Simulate history forward in time:
Tool: simulate
Arguments:
{
"worldId": "<returned from initializeWorld>",
"timespan": 500,
"stepSize": 10,
"complexity": "moderate",
"enableConflict": true,
"enableMigration": true,
"enableTechProgress": true
}Parameter Guide:
timespan: Years to simulate (100-2000 recommended)stepSize: Years per simulation step (1-50, smaller = more detailed)complexity:simple: Basic population and resource changesmoderate: + technology, migration, location evolutioncomplex: + conflict generation between populations
enableConflict: Allow wars and disputesenableMigration: Allow population movement and new settlementsenableTechProgress: Allow technological discoveries
3. Get Timeline
Retrieve the historical events:
Tool: getTimeline
Arguments:
{
"worldId": "<world ID>",
"startYear": 0,
"endYear": 500
}4. Get Current State
View the world's current state:
Tool: getWorldState
Arguments:
{
"worldId": "<world ID>"
}5. Generate Locations
Create specific locations like dungeons or cities:
Tool: generateLocation
Arguments:
{
"worldId": "<world ID>",
"locationType": "dungeon",
"name": "Dark Keep",
"description": "An ancient fortress abandoned after the great war"
}Location Types: dungeon, city, village, fortress, temple, landmark
6. Export World
Get the world in your preferred format:
Tool: exportWorld
Arguments:
{
"worldId": "<world ID>",
"format": "gm_notes",
"includeTimeline": true,
"includeLocations": true
}Export Formats:
json: Structured data for programmatic usemarkdown: Formatted documentationnarrative: Story-style chroniclegm_notes: Game master reference with adventure hooks
6b. Export World to File (For Large Worlds)
When exporting worlds after long simulations (500+ years, 100+ events), the output may exceed token limits. Use file-based export instead:
Tool: exportWorldToFile
Arguments:
{
"worldId": "<world ID>",
"format": "gm_notes",
"includeTimeline": true,
"includeLocations": true,
"filePath": "exports/myworld_1524.md" // Optional, default: exports/{worldId}_{timestamp}.{format}
}What it does:
Writes the export to a file in the
exports/directoryAuto-creates the directory if it doesn't exist
Returns the file path and file size
Avoids token limit issues with large worlds
Default file paths:
exports/{worldId}_{timestamp}.md(markdown)exports/{worldId}_{timestamp}.json(JSON)exports/{worldId}_{timestamp}.narrative(narrative)exports/{worldId}_{timestamp}.gm_notes(GM notes)
Reading exported files:
Tool: readExportFile
Arguments:
{
"filePath": "exports/myworld_1524.md",
"startLine": 1,
"endLine": 100 // Optional: read in chunks
}Pagination options:
startLine/endLine: Read specific line ranges (1-indexed)startByte/endByte: Read specific byte rangesReturns:
content,totalLines,totalBytes,lineRange,byteRange,hasMore
Use case example:
1. exportWorldToFile({ worldId: "abc-123", format: "gm_notes" })
→ Returns: { filePath: "exports/abc-123_1524.gm_notes", size: 45000 }
2. readExportFile({ filePath: "exports/abc-123_1524.gm_notes", startLine: 1, endLine: 50 })
→ Returns first 50 lines + metadata (hasMore: true)
3. readExportFile({ filePath: "exports/abc-123_1524.gm_notes", startLine: 51, endLine: 100 })
→ Returns next 50 lines + metadata (hasMore: true)
4. Continue until hasMore: falseThis allows you to export and read massive worlds (10k+ tokens) without hitting MCP response limits.
7. Add Population
Add new populations (including monsters) to an existing world:
Tool: addPopulation
Arguments:
{
"worldId": "<world ID>",
"name": "Orc Warband",
"size": 50,
"race": "monster",
"culture": "Hill Dwellers",
"organization": "tribal",
"monsterType": "orc",
"dangerLevel": 4,
"behavior": "aggressive"
}Use cases:
Add orc tribes after creating a human city
Introduce elves, dwarves, or other races mid-simulation
Spawn monster threats at specific times
8. Create Crafts/Heritage
Create magical items, weapons, books, artifacts, and lost heritage:
Tool: createCraft
Arguments:
{
"worldId": "<world ID>",
"name": "Sword of the Dawn",
"description": "A legendary blade forged in the first light of the new age",
"category": "weapon",
"rarity": "legendary",
"requiredTechLevel": 6,
"requiredResources": { "iron": 50, "magic": 30, "gems": 20 },
"creatorPopulationId": "<population ID>",
"location": "<location ID>",
"isHidden": false,
"effects": ["+3 damage", "glows in darkness", "burns undead"]
}Categories: weapon, armor, tool, artifact, book, jewelry, structure, relic
Rarities: common, uncommon, rare, legendary, mythic
Hidden Heritage: Set isHidden: true to create lost items that become adventure hooks:
"The legendary Sword of Dawn is lost. Ancient texts hint it may be hidden in an ancient battlefield."
Players can discover these during adventures
8b. Religion & Belief System
The simulation includes a complete religion/belief system that affects gameplay:
Belief Types:
Pantheon: Multiple gods with different domains (war, nature, healing, etc.)
Monotheism: Single deity worship
Animism: Nature spirits and ancestor veneration
Philosophy: Secular moral codes
Cult: Worship of powerful beings (often evil/chaotic)
Folk: Local traditions and customs
Faith Mechanics:
Defense Bonus: Populations with organized religion get +0.15 defense (war domain), holy sites give +0.10
Religious Quests: Pilgrimages, temple restoration, heresy suppression, relic recovery
Holy Items: Blessed weapons, sacred relics, religious artifacts (higher rarity)
Religious Conflicts: Populations with incompatible beliefs can become hostile
Temple Locations: Special locations with divine protection and healing properties
Example:
Population: "The Dwarven Clan"
Belief: "The Stone Father" (Monotheism, domains: fortress, war)
Defense Bonus: +0.15 (organized religion with war domain)
Holy Site: "Mountain Temple" (+0.10 defense when defending this location)9. Quest System
The simulation automatically generates serious quests when populations face problems they cannot solve:
Auto-Generated Quest Types:
Monster Hunts: When monster threat > population defense
Disease Cures: Plagues sweeping through large kingdoms/empires
Resource Recovery: Critical shortages (iron, magic, etc.)
Religious Quests: Pilgrimages, temple restoration, heresy suppression, relic recovery
Quest Properties:
Urgency: low, medium, high, critical
Deadline: Year by which quest must be completed
Heroes Needed: Number of heroes required (0 = open for players)
Consequences: Clear failure/success outcomes
Example:
CRITICAL QUEST: "Cure the Blazing Fever"
- A terrible plague is sweeping through the kingdom
- Physicians are powerless
- Heroes must find a cure in ancient texts or distant lands
- Deadline: 20 years
- Failure: Kingdom decimated, cities become ghost towns
- Success: Kingdom survives, heroes honored for generationsComplete Quests:
Tool: completeQuest
Arguments:
{
"worldId": "<world ID>",
"questId": "<quest ID>",
"success": true,
"completionNotes": "The heroes traveled to the Mountain Temple and retrieved the Sacred Herb"
}Quests appear in GM Notes exports and are prioritized by urgency. Critical quests are highlighted for immediate player attention.
10. Load/Restore Worlds
MCP servers are in-memory only. When the server restarts, worlds are lost. Use loadWorld to restore previously saved worlds:
Step 1: Save world data after creation/simulation:
// After getWorldState or exportWorld, the AI should store the full world JSON
const worldData = JSON.stringify(world);
// AI stores this in its conversation contextStep 2: After restart, load the world:
Tool: loadWorld
Arguments: {
"worldData": "{\"id\":\"abc-123\",\"timestamp\":400,\"society\":{...},...}"
}Step 3: Continue simulation:
Tool: simulate
Arguments: {
"worldId": "abc-123",
"timespan": 100
}The AI automatically handles this - just say "resume my world" or "continue the simulation" and it will use loadWorld() with the saved data.
Example Workflow
Here's a complete example of generating a fantasy setting:
// 1. Create the world with humans
const world = await initializeWorld({
event: "A city founded by refugees near a river",
locationType: "city",
region: "plains",
climate: "temperate",
resources: { food: 70, wood: 60, water: 80 },
population: {
name: "River's Edge",
size: 5000,
culture: "Riverfolk",
organization: "feudal"
}
});
// 2. Add orc threat (not available at creation)
await addPopulation({
worldId: world.worldId,
name: "Orc Warband",
size: 50,
race: "monster",
culture: "Hill Dwellers",
organization: "tribal",
monsterType: "orc",
dangerLevel: 4,
behavior: "aggressive"
});
// 3. Simulate 100 years of conflict
const history = await simulate({
worldId: world.worldId,
timespan: 100,
stepSize: 10,
complexity: "complex"
});
// 4. Export for your campaign
const campaignNotes = await exportWorld({
worldId: world.worldId,
format: "gm_notes"
});Key insight: Add monsters/populations with addPopulation() instead of trying to specify them at creation. This gives you control over timing and numbers.
AI-Generated Crafts Example
The AI can create creative items during simulation:
// After simulating 100 years, the AI might create:
// 1. A magical weapon
await createCraft({
worldId: world.worldId,
name: "Dragonbane",
description: "A greatsword forged from dragon-forged steel, humming with ancient power",
category: "weapon",
rarity: "legendary",
requiredTechLevel: 7,
requiredResources: { iron: 80, magic: 50, gems: 30 },
creatorPopulationId: "pop_123",
effects: ["+5 damage vs dragons", "burns with blue flame"]
});
// 2. A lost book
await createCraft({
worldId: world.worldId,
name: "Tome of the First Kings",
description: "Ancient scroll containing the lost history of the first civilization",
category: "book",
rarity: "mythic",
requiredTechLevel: 5,
creatorPopulationId: "pop_456",
isHidden: true, // Players must find it!
effects: ["reveals hidden truths", "grants +2 to history checks"]
});
// 3. Defensive structure
await createCraft({
worldId: world.worldId,
name: "Iron Barricade of River's Edge",
description: "Massive fortified wall reinforced with magical wards",
category: "structure",
rarity: "uncommon",
requiredTechLevel: 4,
requiredResources: { iron: 60, wood: 40, stone: 50 },
creatorPopulationId: "pop_123",
effects: ["+50% defense against raids"]
});These crafts appear in GM Notes exports and generate adventure hooks like:
"The legendary Tome of the First Kings is lost. Ancient texts hint it may be hidden in a forgotten tomb."
"The Dragonbane sword has been discovered! Powerful factions will seek to claim it."
AI vs Script: Why Use an AI Interface?
The Advantage Over Traditional Generators
Aspect | Traditional Script | AI + MCP Server |
Input | Fixed parameters/JSON | Natural language |
Flexibility | Predefined rules only | Understands intent, adapts |
Iteration | Re-run with new config | "Make orcs more hostile" |
Context | Stateless | Remembers, builds coherence |
Output | Fixed format | Adapts to your needs |
Creativity | Deterministic | Unexpected connections |
How Persistence Works
The AI stores world data in its own context, not in the MCP server:
Create world → MCP returns
worldId+ full world JSONAI saves → Stores the JSON in its conversation history/context
MCP restarts → Server loses all worlds (in-memory only)
Resume work → AI calls
loadWorld()with the saved JSON dataContinue → World is restored, simulation continues
Why this design?
MCP servers are stateless between restarts (by design)
AI context is the "database" - it remembers everything
No file I/O, no database setup, no migration issues
Worlds travel with the conversation
Concrete Examples
Script Approach (Traditional)
{ "monsterCount": 2, "timespan": 400, "enableConflict": true }→ Same output every time with same seed. Limited to predefined options.
AI Approach (This System)
Example 1: Dramatic Tension
"Create a world where ancient dragons are waking up after 500 years
of dormancy, and the human kingdom doesn't know the threat yet"→ AI adjusts monster behavior (dormant dragons), creates foreshadowing events, generates adventure hooks about "strange tremors" and "sheep disappearing"
Example 2: Iterative Refinement
"Actually, make the orc kingdom more aggressive and have them
raid the dwarven mines every 50 years"→ AI modifies monster behavior, adjusts raid frequency, creates specific conflict events without re-running everything
Example 3: Contextual Export
"Export this as handouts for my players, hiding the dragon threat"→ AI creates player-friendly version, omits DM-only information, formats as in-world documents
Example 4: Resuming After Restart
"Load my world from last session"→ AI retrieves saved JSON from context, calls loadWorld(savedData),
continues simulation where it left off
The MCP Server Pattern
This isn't just a generator—it's a simulation engine that:
Runs in-memory - Fast, no database overhead
AI manages persistence - World data lives in AI context
Load/Resume -
loadWorld()restores any saved worldIntegrates with workflow - opencode, VTTs, campaign tools
Without AI: You'd need to write code to tweak anything
With AI: You just ask, and it uses the tools
Simulation Rules
The engine simulates these anthropological and geographical processes:
Population Dynamics
Growth based on food and water availability
Decline during shortages or conflicts
Organization evolution: nomadic → tribal → feudal → kingdom → empire
Technology Progression
Populations discover technologies through a dynamic progression system based on multiple factors:
Tech Progression Formula:
Base chance: 5% per population per 10-year step
Population size bonus: +0.1% per 100 people (max +5%)
Organization bonus: tribal +0%, feudal +2%, kingdom +4%, empire +6%
Critical quest bonus: +3% per active critical quest (max +9%)
Problem overload penalty: -2% if >5 active critical quests
Resource abundance bonus: +1% per abundant resource (value > 60)
Relic/artifact bonus: +5% if population has legendary/mythic item
Trade route bonus: +2% if population has active trade routes
Maximum chance: 50%
Complete Tech Tree:
Level | Technologies | Era |
0 | Stone Tools, Fire Mastery, Basic Shelter | Stone Age |
1 | Language Development, Social Cooperation | Early Society |
2 | Agriculture, Pottery, Domestication, Basic Medicine | Neolithic |
3 | Bronze Working, Wheel, Writing, Irrigation, Mining | Bronze Age |
4 | Iron Working, Architecture, Mathematics, Law | Iron Age |
5 | Steel, Navigation, Philosophy, Advanced Medicine | Classical |
6 | Gunpowder, Printing, Telescope, Banking | Medieval |
7 | Industrial Revolution, Steam Power, Electricity | Early Modern |
8 | Telegraph, Railways, Mass Production | Industrial |
9 | Electricity Grid, Internal Combustion, Aviation | Modern |
10 | Modern Computing, Internet, Space Technology | Contemporary (cap) |
Tech Prerequisites:
Technologies unlock in order by level
Can't discover level N+1 technology without completing level N
Each technology contributes to the population's technology level
Tech Milestones:
When a population reaches a new tech level, a TECH_MILESTONE event is created in the timeline, marking significant societal advancement.
Tech Level Effects:
Level 2+: Can spawn basic heroes (Warrior, Rogue)
Level 3+: Can spawn specialized heroes (Ranger, Cleric)
Level 4+: Can spawn elite heroes (Paladin, Barbarian)
Level 5+: Can spawn rare heroes (Mage, Bard)
Relics and Tech: Populations with legendary or mythic crafts/artifacts receive a +5% bonus to tech progression, representing the knowledge and inspiration gained from powerful items.
Location Evolution
Cave → Settlement (50 years, 30+ population, tech level 3)
Settlement → Village (100 years, 100+ population, tech level 5)
Village → City (200 years, 300+ population, kingdom organization)
City → Ruins (conflict + 300 years, 20% chance per step)
Resource Dynamics
Consumption based on population size
Regeneration for non-renewable resources
Critical shortages trigger events
Natural Events
Earthquakes (mountains)
Forest fires (forest)
Droughts (plains)
Floods (swamp)
Output Examples
Timeline Output
Age of Discovery (0-50): Key developments: Beginning
Age of Settlement (50-100): Key developments: Earthquake, Agriculture
Age of Expansion (100-200): Key developments: Pottery, Migration
Age of Kingdoms (200-300): Key developments: Iron Working, Village Founded
Age of Empires (300-500): Key developments: City Founded, WritingAdventure Hooks (from GM Notes)
1. The iron mines are running dry. Adventurers must find new sources.
2. Strange magical phenomena are appearing near the Luminary Depths.
3. The war between Mountain Clan and River Tribes is escalating.
4. Ancient ruins have been disturbed. Something ancient has awakened.Tips for AI Users
Using with Opencode
Important: The MCP server maintains state during a single opencode session. Keep track of the worldId returned from initializeWorld and use it in subsequent calls.
Start opencode with the configured MCP server
Create a world - The AI will automatically include
resources: {}:"Create a fantasy world starting with a cave"With monsters:
"Create a world with dwarves and humans, enable 2 monsters (a dragon and orcs), simulate 400 years"The AI should call:
initializeWorld({ event: "a mysterious cave in the mountains", locationType: "cave", region: "mountains", climate: "temperate", population: [ {name: "Mountain Exiles", size: 25, race: "human", culture: "Highlanders", organization: "tribal"}, {name: "Dragon Horde", size: 15, race: "monster", monsterType: "dragon", dangerLevel: 8, behavior: "aggressive"} ], resources: {}, // Required - can be empty enableMonsters: true, // Enable monster spawning monsterCount: 1 // Number of auto-generated monsters })Note the worldId - The response will include a world ID like
12bff51b-...Simulate - Ask the AI to use that specific worldId:
"Simulate world 12bff51b-... for 500 years"Export - Get the final output:
"Export world 12bff51b-... as GM notes"
Pro tip: Ask the AI to "remember the world ID" or "keep track of the world" to maintain context across multiple tool calls.
Monster System
The world can include monster populations that act as threats to civilizations:
Monster Types: dragon, giant, orc, goblin, undead, beast, demon, aberration, fae
Behaviors: aggressive (raids constantly), territorial (defends lair), nomadic (migrates), dormant (sleeps), hiding (lurks)
Danger Level: 1-10 threat rating
Automatic spawning: Set
enableMonsters: trueandmonsterCount: 2to auto-generate monstersMonster events: Raids, infestations, invasions, awakening from dormancy
Adventure hooks: Monster threats automatically generate quest hooks in GM notes
Resuming Worlds After Restart
MCP servers are in-memory only. When opencode restarts, worlds are lost. But the AI can restore them:
Step 1: AI saves world data after creation/simulation:
AI stores in context:
{
"myWorld": {
"id": "abc-123",
"timestamp": 400,
"society": {...},
"events": [...],
...
}
}Step 2: After restart, AI loads the world:
Tool: loadWorld
Arguments: {
"worldData": "{\"id\":\"abc-123\",\"timestamp\":400,...}"
}Step 3: Continue simulation:
Tool: simulate
Arguments: {
"worldId": "abc-123",
"timespan": 100
}The AI automatically handles this - just say "resume my world" or "continue the simulation".
Using with OpenAI-Compatible API
If your opencode setup uses an external API:
Edit
.env.localwith your API settings:API_BASE_URL=https://your-api-endpoint.com/v1 API_KEY=your-api-key API_MODEL=your-model-nameConfigure opencode to use these env vars (check your opencode docs)
The MCP tools will still work - they run locally regardless of where the AI model comes from
Start Small: Begin with 200-300 years to see the system's behavior
Use Seeds: Pass a
seedparameter for reproducible resultsCheck Resources: Low food/water creates dramatic conflict scenarios
High Magic: Set magic > 70 for supernatural events
Multiple Populations: Create separate worlds and merge concepts
Export Early: Save interesting worlds before continuing simulation
Iterate: Generate, review, adjust parameters, regenerate
Troubleshooting
No Events Generated
Increase
timespanor decreasestepSizeSet
complexityto "moderate" or "complex"Ensure population size is reasonable (10+)
Simulation Too Simple
Use
complexity: "complex"Enable all options: conflict, migration, techProgress
Start with larger population (50+)
Export Format Issues
Try different formats:
jsonfor data,markdownfor readingSet
includeTimeline: falsefor shorter output
Quick Start
# 1. Build the project
npm run build
# 2. Add to opencode config (see Configuration section above)
# 3. Verify:
opencode mcp list
# 4. Start opencode and ask your AI:
# "Create a fantasy world starting with a cave"Development
# Build
npm run build
# Run tests
npm run test
# Start server directly
npm start
# Task Management
npm tasks # List all development tasks
node scripts/transition.cjs <id> in_progress # Mark task as in progress
node scripts/complete.cjs <id> "message" # Complete task and commitTask System
This project uses a task-based workflow for development:
Location:
tasks/directory (ignored by git)Format: Individual
.task.jsonfiles for each taskStates:
pending,in_progress,completedWorkflow:
Create task file
npm run task:transition <id> in_progressImplement, test, commit
npm run task:complete <id> "commit message"
See tasks/README.md for full documentation.
License
ISC
This server cannot be installed
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Latest Blog Posts
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/DangerBlack/fantasy-world-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server