-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathmain.go
More file actions
68 lines (57 loc) · 3.87 KB
/
main.go
File metadata and controls
68 lines (57 loc) · 3.87 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
package main
import (
"context"
"log"
"os"
"upbit-mcp-server/upbit"
"github.com/modelcontextprotocol/go-sdk/mcp"
)
func main() {
getAvailableOrderInfoDescription := `Retrieves the order availability information for the specified pair.
The response doesn't include current trading pair prices
you should consider the current price if you want to decide whether to buy or sell.`
getClosedOrderHistoryDescription := `Retrieves the order availability information for the specified pair.
The response doesn't include current trading pair prices
you should consider the current price if you want to decide whether to buy or sell.`
getOpenOrdersDescription := `Retrieves the order availability information for the specified pair.
The response doesn't include current trading pair prices
you should consider the current price if you want to decide whether to buy or sell.`
server := mcp.NewServer(&mcp.Implementation{
Name: "greeter",
Version: "v1.0.0",
}, nil)
server.AddReceivingMiddleware(createLoggingMiddleware())
accessKey := os.Getenv("UPBIT_ACCESS_KEY")
secretKey := os.Getenv("UPBIT_SECRET_KEY")
if accessKey == "" || secretKey == "" {
log.Fatal("UPBIT_ACCESS_KEY and UPBIT_SECRET_KEY must be set")
}
client := upbit.NewClient(accessKey, secretKey)
ctx := context.WithValue(context.Background(), upbitClientKey{}, client)
// Add MCP tools
mcp.AddTool(server, &mcp.Tool{Name: "GetAccounts", Description: "전체 계좌 조회"}, GetAccounts)
mcp.AddTool(server, &mcp.Tool{Name: "PlaceBuyOrderByLimit", Description: "지정가 매수 주문하기"}, PlaceBuyOrderByLimit)
mcp.AddTool(server, &mcp.Tool{Name: "PlaceBuyOrderByMarket", Description: "시장가 매수 주문하기"}, PlaceBuyOrderByMarket)
mcp.AddTool(server, &mcp.Tool{Name: "PlaceSellOrderByLimit", Description: "지정가 매도 주문하기"}, PlaceSellOrderByLimit)
mcp.AddTool(server, &mcp.Tool{Name: "PlaceSellOrderByMarket", Description: "시장가 매도 주문하기"}, PlaceSellOrderByMarket)
mcp.AddTool(server, &mcp.Tool{Name: "CancelOrder", Description: "주문 취소하기"}, CancelOrder)
mcp.AddTool(server, &mcp.Tool{Name: "GetAvailableOrderInfo", Description: getAvailableOrderInfoDescription}, GetAvailableOrderInfo)
mcp.AddTool(server, &mcp.Tool{Name: "GetClosedOrderHistory", Description: getClosedOrderHistoryDescription}, GetClosedOrderHistory)
mcp.AddTool(server, &mcp.Tool{Name: "GetOpenOrders", Description: getOpenOrdersDescription}, GetOpenOrders)
mcp.AddTool(server, &mcp.Tool{Name: "GetMarketSummary", Description: "Summarized multiple market information. If given market is unavailable in Upbit, then the return value doesn't include it"}, GetMarketSummary)
mcp.AddTool(server, &mcp.Tool{Name: "GetMarketTrends", Description: "Get market trends, top 10 market by volume, top 10 gainers and top 10 losers"}, GetMarketTrends)
mcp.AddTool(server, &mcp.Tool{Name: "GetDayCandles", Description: "Get daily candles"}, GetDayCandles)
mcp.AddTool(server, &mcp.Tool{Name: "GetWeekCandles", Description: "Get weekly candles"}, GetWeekCandles)
mcp.AddTool(server, &mcp.Tool{Name: "GetMonthCandles", Description: "Get monthly candles"}, GetMonthCandles)
mcp.AddTool(server, &mcp.Tool{Name: "GetMinuteCandles", Description: "Get minute candles"}, GetMinuteCandles)
// Add technical analysis tools
mcp.AddTool(server, &mcp.Tool{Name: "GetMovingAverage", Description: "Get moving average (SMA, EMA)"}, GetMovingAverage)
mcp.AddTool(server, &mcp.Tool{Name: "GetMACD", Description: "Get MACD"}, GetMACD)
mcp.AddTool(server, &mcp.Tool{Name: "GetBollingerBands", Description: "Get Bollinger Bands"}, GetBollingerBands)
mcp.AddTool(server, &mcp.Tool{Name: "GetRSI", Description: "Get RSI"}, GetRSI)
mcp.AddTool(server, &mcp.Tool{Name: "GetOBV", Description: "Get OBV"}, GetOBV)
log.Println("MCP server started")
if err := server.Run(ctx, &mcp.StdioTransport{}); err != nil {
log.Fatal(err)
}
}