We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/shibaleo/mcpist'
If you have feedback or need assistance with the MCP directory API, please join our Discord server
package db
import (
"fmt"
"time"
"gorm.io/gorm"
)
// APIKeyResponse is the response for listing API keys (no secrets).
type APIKeyResponse struct {
ID string `json:"id"`
KeyPrefix string `json:"key_prefix"`
Name string `json:"name"`
ExpiresAt *time.Time `json:"expires_at,omitempty"`
LastUsedAt *time.Time `json:"last_used_at,omitempty"`
CreatedAt time.Time `json:"created_at"`
}
// ListAPIKeys returns all API keys for a user.
func ListAPIKeys(db *gorm.DB, userID string) ([]APIKeyResponse, error) {
var keys []APIKey
if err := db.Where("user_id = ?", userID).
Order("created_at DESC").
Find(&keys).Error; err != nil {
return nil, err
}
result := make([]APIKeyResponse, len(keys))
for i, k := range keys {
result[i] = APIKeyResponse{
ID: k.ID,
KeyPrefix: k.KeyPrefix,
Name: k.Name,
ExpiresAt: k.ExpiresAt,
LastUsedAt: k.LastUsedAt,
CreatedAt: k.CreatedAt,
}
}
return result, nil
}
// CreateAPIKey stores API key metadata. The JWT is generated by the auth package.
// Returns the created key record.
func CreateAPIKey(db *gorm.DB, userID, jwtKID, keyPrefix, name string, expiresAt *time.Time) (*APIKey, error) {
key := APIKey{
UserID: userID,
JwtKID: jwtKID,
KeyPrefix: keyPrefix,
Name: name,
ExpiresAt: expiresAt,
}
if err := db.Create(&key).Error; err != nil {
return nil, err
}
return &key, nil
}
// RevokeAPIKey physically deletes an API key.
func RevokeAPIKey(db *gorm.DB, userID, keyID string) error {
result := db.Where("id = ? AND user_id = ?", keyID, userID).Delete(&APIKey{})
if result.RowsAffected == 0 {
return fmt.Errorf("api key not found")
}
return result.Error
}
// GetAPIKeyByID returns an API key by its ID, or an error if not found.
func GetAPIKeyByID(db *gorm.DB, keyID string) (*APIKey, error) {
var key APIKey
if err := db.Where("id = ?", keyID).First(&key).Error; err != nil {
return nil, err
}
return &key, nil
}
// UpdateAPIKeyLastUsed updates the last_used_at timestamp.
func UpdateAPIKeyLastUsed(db *gorm.DB, keyID string) {
db.Model(&APIKey{}).Where("id = ?", keyID).Update("last_used_at", time.Now())
}