I'm attempting to determine if its possible to integrate Trello into our existing development environment. We're currently using Team Foundation Server as our source code control repository and I'd like to link tasks within TFS to list items on a board in Trello, is this even remotely possible? I know there's an API in place, I'm mainly curious if anyone has attempted an integration like this yet. If this were possible, Trello would essentially become our user interface into TFS.

2 Answers 2


The program below creates TFS tasks from Trello cards. Trello checklists appear as task item descriptions.

using System;
using System.Collections.Generic;
using System.Text;
using Microsoft.TeamFoundation.Client;
using Microsoft.TeamFoundation.WorkItemTracking.Client;
using TrelloNet;

namespace TFSTrelloAPI
    class Program
        #region Trello Security
        public static string DevTeamTasksBoardId { get; set; }
        public static string TrelloToken { get; set; }
        public static string TrelloKey { get; set; }

        #region TFS Details
        public static string TFSProject { get; set; }
        public static string TFSServerUri { get; set; }
        public static Uri Url { get; set; }

        static void Main(string[] args)
            ITrello trello = new Trello(TrelloKey);
            IList<string> lines = new List<string>();
            Url = trello.GetAuthorizationUrl("TFSImport", Scope.ReadOnly);
            var boards = trello.Boards;
            foreach (var board in boards.ForMe())
                if (board.Id == DevTeamTasksBoardId)
                    lines.Add("Name: " + board.Name);
                    lines.Add(" Desc: " + board.Desc);
                    lines.Add("ID: " + board.Id);
            IBoardId bid = new BoardId(DevTeamTasksBoardId);

            var lists = trello.Lists.ForBoard(bid);
            foreach (var list in lists)
                var listId = new ListId(list.Id);
                var cards = trello.Cards.ForList(listId);
                foreach (var card in cards)
                    var sbTaskDesc = new StringBuilder();
                    string taskName = (card.Name + " * Desc: " + card.Desc);
                    ICardId ic = new CardId(card.Id);
                    var chkLists = trello.Checklists.ForCard(ic);
                    foreach (var checklist in chkLists)
                        sbTaskDesc.AppendLine(" * " + checklist.Name);
                        sbTaskDesc.AppendLine(" * ");
                        var ckItems = checklist.CheckItems;
                        foreach (var checkItem in ckItems)
                            sbTaskDesc.AppendLine(" * " + checkItem.Name);
                    string taskDesc = sbTaskDesc.ToString();
                    CreateTask(taskName, taskDesc);

    /// <summary>
        /// Replace empty strings with specific TFS information
        /// </summary>
        private static void SetTFSDetails()
            TFSServerUri = string.Empty;
            TFSProject = string.Empty;
            Url = new Uri(TFSServerUri);
        /// <summary>
        /// Replace empty strings with values from your Trello 
        /// See TrelloAPI documentaiotn for details
        /// </summary>
        private static void SetTrelloSecurity()
            DevTeamTasksBoardId = string.Empty;
            TrelloToken = string.Empty;
            TrelloKey = string.Empty;
        private static void CreateTask(string taskName, string taskDesc)
            // Connect to the server and the store, and get the WorkItemType object
            // for user stories from the team project where the user story will be created. 
            var collectionUri = new Uri(TFSServerUri);
            var tpc = new TfsTeamProjectCollection(collectionUri);
            var workItemStore = tpc.GetService<WorkItemStore>();
            Project teamProject = workItemStore.Projects[TFSProject];
            WorkItemType workItemType = teamProject.WorkItemTypes["Task"];

            // Create the work item. 
            var userStory = new WorkItem(workItemType)
                // The title is the only required field that does not have a default value. 
                // You must set it, or you cannot save the work item. 
                Title = taskName.Length > 255 ? taskName.Substring(0, 254) : taskName, // max length for name 255 char
                Description = taskDesc

            // Save the new user story. 


There is no way to do this inside the Trello app, but there is an API you can use to write the integration yourself. The documentation is here: https://trello.com/docs

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.