Skip to main content
Glama
blade47

ShadowGit MCP Server

by blade47

end_session

Close your work session to resume ShadowGit's automatic commit tracking after completing tasks.

Instructions

End your work session to resume ShadowGit auto-commits. MUST be called AFTER checkpoint to properly close your work session.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
sessionIdYesSession ID from start_session
commitHashNoCommit hash from checkpoint (optional)

Implementation Reference

  • Main handler function that executes the end_session tool: validates input, calls SessionClient to end the session via API, and formats the MCP response.
      async endSession(args: unknown): Promise<MCPToolResponse> {
        // Validate args
        if (!this.isEndSessionArgs(args)) {
          return createErrorResponse(
            'Error: "sessionId" is required for end_session.'
          );
        }
    
        // End session
        const success = await this.sessionClient.endSession(
          args.sessionId,
          args.commitHash
        );
    
        if (success) {
          log('info', `Session ended: ${args.sessionId}`);
          return {
            content: [{
              type: 'text',
              text: `Session ${args.sessionId} ended successfully.`
            }]
          };
        }
    
        return createErrorResponse(
          `❌ **Failed to End Session**
    ${'='.repeat(50)}
    
    ⚠️ The session may have already ended or expired.
    
    **Note:** Auto-commits may have already resumed.
    
    💡 **NEXT STEP:** You can continue working or start a new session.`
        );
      }
  • MCP protocol input schema definition for the end_session tool, specifying required sessionId and optional commitHash.
      name: 'end_session',
      description: 'End your work session to resume ShadowGit auto-commits. MUST be called AFTER checkpoint to properly close your work session.',
      inputSchema: {
        type: 'object',
        properties: {
          sessionId: {
            type: 'string',
            description: 'Session ID from start_session',
          },
          commitHash: {
            type: 'string',
            description: 'Commit hash from checkpoint (optional)',
          },
        },
        required: ['sessionId'],
      },
    }
  • Registration in the tool dispatch switch statement, routing end_session calls to the SessionHandler.
    case 'end_session':
      return await this.sessionHandler.endSession(args);
  • Core helper method that performs the HTTP POST to the Session API endpoint /session/end to actually end the session.
    async endSession(sessionId: string, commitHash?: string): Promise<boolean> {
      try {
        const controller = new AbortController();
        const timeoutId = setTimeout(() => controller.abort(), this.timeout);
    
        const data: SessionEndRequest = { sessionId };
        if (commitHash) {
          data.commitHash = commitHash;
        }
    
        const response = await fetch(`${this.baseUrl}/session/end`, {
          method: 'POST',
          headers: {
            'Content-Type': 'application/json',
          },
          body: JSON.stringify(data),
          signal: controller.signal,
        });
    
        clearTimeout(timeoutId);
    
        if (response.ok) {
          const result = await response.json() as SessionEndResponse;
          if (result.success) {
            log('info', `Session ended: ${sessionId}`);
            return true;
          }
        }
        
        log('warn', `Failed to end session: ${response.status} ${response.statusText}`);
      } catch (error) {
        if (error instanceof Error && error.name !== 'AbortError') {
          log('debug', `Failed to end session: ${error.message}`);
        }
      }
      return false;
    }
  • TypeScript interface and runtime validator for end_session arguments in the handler.
    private isEndSessionArgs(args: unknown): args is EndSessionArgs {
      return (
        typeof args === 'object' &&
        args !== null &&
        'sessionId' in args &&
        typeof (args as EndSessionArgs).sessionId === 'string'
      );
    }

Tool Definition Quality

Score is being calculated. Check back soon.

Install Server

Other Tools

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/blade47/shadowgit-mcp'

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