Skip to main content
Glama
krasnoff

sign-in-form

by krasnoff

MCP App Template

A small, ready-to-customize template for building an interactive Model Context Protocol (MCP) app with React and TypeScript.

The project includes:

  • An MCP server built with the TypeScript SDK

  • An interactive React UI registered as an MCP App resource

  • A sample open-sign-in tool that displays the UI in a compatible MCP host

  • Streamable HTTP and stdio transport support

  • A Vite build that packages the UI into a single HTML file

  • Development, build, serve, and type-check scripts

The included sign-in form is only a UI example. It does not authenticate users or send credentials to a server. Replace it with your own interface and application logic.

Requirements

  • Node.js 20 or newer

  • npm

  • An MCP client or host with MCP Apps support to display the interactive UI

Related MCP server: MCP Docker Demo

Create a project from the template

On GitHub, click Use this template, choose Create a new repository, and then clone the repository you created:

git clone https://github.com/YOUR_USERNAME/YOUR_REPOSITORY.git
cd YOUR_REPOSITORY

Alternatively, clone this repository directly.

Install

Install the project dependencies:

npm install

Development

Start the UI and MCP server in watch mode:

npm run dev

The MCP endpoint is available at:

http://localhost:3001/mcp

The development command rebuilds the UI when files change and restarts the server when its TypeScript files change.

Build and run

Create a production build and start the server:

npm run build
npm run serve

To use another port, set the PORT environment variable:

PORT=4000 npm run serve

Your endpoint will then be http://localhost:4000/mcp.

Connect an MCP client

Streamable HTTP

Configure your MCP client to connect to:

http://localhost:3001/mcp

After connecting, call the open-sign-in tool. A compatible MCP Apps host will render the interactive form returned by the server.

stdio

Clients that launch local MCP servers can run this project over stdio. For example, use a configuration equivalent to:

{
  "mcpServers": {
    "my-mcp-app": {
      "command": "npm",
      "args": ["start"],
      "cwd": "/absolute/path/to/YOUR_REPOSITORY",
      "env": {
        "TRANSPORT": "stdio"
      }
    }
  }
}

The exact configuration format depends on your MCP client. Use an absolute path for cwd.

You can also test the stdio server from a terminal:

TRANSPORT=stdio npm start

Customize the template

The main files are:

  • src/main.tsx — React interface and client-side behavior

  • src/style.css — UI styling

  • server.ts — MCP tool and UI resource registration

  • main.ts — HTTP and stdio transports

  • vite.config.ts — browser UI build configuration

When adapting the template:

  1. Replace the sample form in src/main.tsx with your UI.

  2. Update the tool name, description, schemas, and handler in server.ts.

  3. Change the server and app names from sign-in-form to your project name.

  4. If the UI needs to call MCP tools, add those tools to server.ts and invoke them through the MCP Apps client API.

  5. Run npm run typecheck and npm run build before publishing.

Public hosting

For remote use, deploy the built Node.js server behind HTTPS and expose its /mcp route. Set PUBLIC_HOST to the public hostname without a protocol:

PUBLIC_HOST=mcp.example.com npm run serve

PUBLIC_HOST is used by the server's host and origin protection. Update the defaults and security policy in main.ts for your deployment, especially if the UI loads assets or communicates with additional domains.

Scripts

Command

Purpose

npm run dev

Run the UI build and MCP server in watch mode

npm run build

Build the single-file UI and compile the server

npm run serve

Run the compiled production server

npm start

Run the TypeScript server directly

npm run typecheck

Type-check the UI and server

License

MIT

Available Tools

1 tool
open-sign-inOpen sign-in formA

Display an interactive username and password form.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
readyYes

TDQS

A3.8/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the burden of disclosing behavior. It does clarify that the tool displays an interactive form rather than performing authentication, which is useful. However, it does not disclose side effects, what happens after display, or whether any state changes occur.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is one short, front-loaded sentence with no filler. Every word adds meaning, and the sentence structure is immediately scannable for an agent.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple, parameterless display tool, the description is mostly complete: it names the action and UI element shown. An output schema exists, so return-value details are presumably covered there. The main omission is usage context, but that is already reflected in the usage-guidelines score.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool has zero parameters and an empty input schema, so there is no parameter semantics burden. The baseline for 0-parameter tools is 4, and the description reasonably does not need to document inputs.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb, 'Display', and a specific resource, 'an interactive username and password form'. This both matches the tool name and disambiguates it from a sign-in/authentication action. There are no sibling tools, so no differentiation is needed.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives no guidance on when to call this tool or when to avoid it. It only says what the tool does; there is no mention of prerequisites, context, or alternatives. With no siblings, some usage context would still help the agent decide when displaying a sign-in form is appropriate.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.

  1. 1 tool updatev1.0.0
    • First observedopen-sign-in

TDQS

A3.9/5.0
Disambiguation5/5

With only a single tool, there is no possibility of confusing it with another tool. The purpose of open-sign-in is clearly stated and unambiguous.

Naming Consistency5/5

The tool name follows a clear verb_noun pattern (open-sign-in) and there are no other tools to create inconsistencies. As the sole tool, it presents no naming conflicts.

Tool Count3/5

The server is reduced to a single tool, which feels thin even for a narrow purpose. While the scope is minimal, a complete sign-in flow would typically require additional tools such as submit_sign_in or validate_credentials, so the count is borderline.

Completeness3/5

The tool displays a sign-in form but offers no way to submit or process the entered credentials, leaving the agent unable to complete a sign-in action. This is a notable gap in the tool surface for a server that claims to handle sign-ins.

Maintenance

ActivityMaintained
ResponsivenessSyncing

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    D
    maintenance
    A demonstration MCP server that provides basic utility tools including hello world functionality and string reversal operations. Shows how to build and deploy MCP tools using the MCPO orchestrator framework.
    GPL 3.0
  • F
    license
    Not graded
    quality
    D
    maintenance
    A demonstration MCP server implementation with Docker support that provides a simple hello-world tool and includes a web-based inspector for interactive testing and exploration of MCP tools.
    -
  • F
    license
    Not graded
    quality
    D
    maintenance
    A minimal MCP server framework that enables zero-config tool discovery and streamable HTTP transport using the LeanMCP SDK. It allows developers to build type-safe services with automatic schema validation and integrated React UI components.
    -
  • F
    license
    Not graded
    quality
    D
    maintenance
    A minimal MCP server that exposes a 'say_hello' tool and serves an Angular UI as an MCP App resource, demonstrating the MCP App architecture.
    -

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/krasnoff/mcp-app-template'

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