Skip to main content
Glama
dorukardahan

Domain Search MCP

check_socials

Verify username availability across social media and developer platforms to secure consistent branding. Returns status with confidence levels for GitHub, Twitter, Reddit, npm, and other platforms.

Instructions

Check if a username is available on social media and developer platforms.

Supports 10 platforms with varying confidence levels:

  • HIGH: GitHub, npm, PyPI, Reddit, Twitter/X (reliable public APIs)

  • MEDIUM: YouTube, ProductHunt (status code based)

  • LOW: Instagram, LinkedIn, TikTok (block automated checks - verify manually)

Returns availability status with confidence indicator.

Example:

  • check_socials("vibecoding") → checks GitHub, Twitter, Reddit, npm

  • check_socials("myapp", ["github", "npm", "pypi"]) → developer platforms only

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
nameYesThe username/handle to check.
platformsNoPlatforms to check. Defaults to ['github', 'twitter', 'reddit', 'npm'].

Implementation Reference

  • Main execution function for the 'check_socials' tool. Parses input, normalizes username, checks platforms in parallel using checkPlatform, categorizes results, generates insights, and returns structured response.
    export async function executeCheckSocials(
      input: CheckSocialsInput,
    ): Promise<CheckSocialsResponse> {
      try {
        const { name, platforms } = checkSocialsSchema.parse(input);
    
        // Default platforms: mix of social and developer platforms
        const platformsToCheck: SocialPlatform[] = platforms || [
          'github',
          'twitter',
          'reddit',
          'npm',
        ];
    
        // Normalize username (lowercase, remove special chars)
        const normalizedName = name.toLowerCase().replace(/[^a-z0-9_-]/g, '');
    
        // Check all platforms in parallel (max 5 concurrent)
        const results = await Promise.all(
          platformsToCheck.map((p) => checkPlatform(normalizedName, p)),
        );
    
        // Categorize results by confidence
        const highConfidence = results.filter((r) => r.confidence === 'high');
        const available = results.filter(
          (r) => r.available && r.confidence !== 'low',
        );
        const taken = results.filter((r) => !r.available && r.confidence !== 'low');
        const uncertain = results.filter((r) => r.confidence === 'low');
    
        // Generate insights
        const insights: string[] = [];
    
        if (available.length > 0) {
          insights.push(
            `✅ "${normalizedName}" is available on: ${available.map((r) => r.platform).join(', ')}`,
          );
        }
    
        if (taken.length > 0) {
          insights.push(
            `❌ "${normalizedName}" is taken on: ${taken.map((r) => r.platform).join(', ')}`,
          );
        }
    
        if (uncertain.length > 0) {
          insights.push(
            `⚠️ Could not reliably check: ${uncertain.map((r) => r.platform).join(', ')} (verify manually)`,
          );
        }
    
        // Developer-focused insight
        const devPlatforms = results.filter((r) =>
          ['github', 'npm', 'pypi'].includes(r.platform),
        );
        const allDevAvailable = devPlatforms.every((r) => r.available);
        if (devPlatforms.length > 0 && allDevAvailable) {
          insights.push(
            `🛠️ Great for developers! "${normalizedName}" is available on all dev platforms`,
          );
        }
    
        // Branding consistency advice
        const allAvailable = results.every((r) => r.available);
        const allTaken = results.every((r) => !r.available);
    
        if (allAvailable) {
          insights.push(
            `🎉 Perfect! "${normalizedName}" is available everywhere - grab it now!`,
          );
        } else if (allTaken) {
          insights.push(
            `💡 Try variations: ${normalizedName}hq, ${normalizedName}app, get${normalizedName}, ${normalizedName}io`,
          );
        } else if (available.length > 0 && taken.length > 0) {
          insights.push(
            '💡 For consistent branding, consider a name available on all platforms',
          );
        }
    
        return {
          name: normalizedName,
          results,
          summary: {
            available: available.length,
            taken: taken.length,
            uncertain: uncertain.length,
          },
          insights,
        };
      } catch (error) {
        throw wrapError(error);
      }
    }
  • Zod input validation schema for the check_socials tool defining 'name' and optional 'platforms'.
    export const checkSocialsSchema = z.object({
      name: z
        .string()
        .min(1)
        .max(30)
        .describe("The username/handle to check (e.g., 'vibecoding')."),
      platforms: z
        .array(z.enum(ALL_PLATFORMS))
        .optional()
        .describe(
          "Platforms to check. Defaults to ['github', 'twitter', 'reddit', 'npm'].",
        ),
    });
  • src/server.ts:58-66 (registration)
    Registration of checkSocialsTool in the server's main TOOLS array.
    const TOOLS: Tool[] = [
      searchDomainTool as Tool,
      bulkSearchTool as Tool,
      compareRegistrarsTool as Tool,
      suggestDomainsTool as Tool,
      suggestDomainsSmartTool as Tool,
      tldInfoTool as Tool,
      checkSocialsTool as Tool,
    ];
  • src/server.ts:212-219 (registration)
    Dispatch handler in executeToolCall switch statement for 'check_socials' tool.
    case 'check_socials':
      return executeCheckSocials({
        name: args.name as string,
        platforms: args.platforms as
          | Array<'github' | 'twitter' | 'instagram' | 'linkedin' | 'tiktok'>
          | undefined,
      });
  • TypeScript interface definition for CheckSocialsInput used in tool implementation.
    export interface CheckSocialsInput {
      name: string;
      platforms?: SocialPlatform[];
    }

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/dorukardahan/domain-search-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server